pyspark讀取csv文件,並一次性把數據寫入數據庫

pyspark讀取csv文件,並一次性把數據寫入數據庫

csv中可能會有空值
pyspark讀取csv後,數據有null值無法插入數據庫,利用下面這條命令把null轉化爲None,確保數據能插入數據庫表中
raw_date.astype(object).where(pd.notnull(raw_date),None)

import pandas as pd
from pyspark import SQLContext
from pyspark.sql import SparkSession
import pymssql


# 利用SQLContext讀取csv文件
spark=SparkSession.builder.appName('bianzu').getOrCreate()
sqlContext = SQLContext(spark)

# 讀取csv文件
raw_date = sqlContext.read.format('com.databricks.spark.csv').options(header='True',inferschema='true',encoding='GBK').load(f'D:/tmp/bianzu/mtf.csv')
raw_date.show()
raw_date = raw_date.toPandas()

#csv中可能會有空值
# pyspark讀取csv後,數據有null值無法插入數據庫,把null轉化爲None,確保數據能插入csv
raw_date = raw_date.astype(object).where(pd.notnull(raw_date),None)
print(raw_date.dtypes)

val = [tuple(item)  for item in raw_date.values]
print(val)

#連接sqlserver數據庫
sql_db = pymssql.connect(server='10.178.13.1', port=1433, user='rw-etl', password='rw-etl.aac', database='DW')
sql_cursor = sql_db.cursor()
# 往數據庫執行插入的sql命令
sql = "INSERT INTO DW.dbo.MTF_frequency(project_name,mtf_frequency,lens_structure,control_field,air_gap) VALUES (%s,%d,%s,%s,%s)"

# 批量執行多條插入SQL語句
sql_cursor.executemany(sql,val)
sql_db.commit()
sql_db.close()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章