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()

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