Spark Apache没有删除“NULL”值
问题描述:
我有一个火花脚本,应该删除数据帧构建基础上的空值从csv文件读取的数据。Spark Apache没有删除“NULL”值
这是我的csv文件怎么看起来像:
Name,Surname,Age,Class,Categ
John,Snow,30,2nd,NULL
Alfred,Nobel,69,10th,m
Isaac,Newton,55,9th,m
所以,我需要删除每行包括“NULL”值。为了达到这个效果,这个我wrinting代码:
rdd = sc.textFile(dataset)
header = rdd.first()
data = rdd.filter(lambda x: x!=header).map(lambda line: line.replace("NULL","").split(","))
columns = header.split(",")
df = spark.createDataFrame(data, columns)
cleanedData = df.na.drop()
cleanedData.coalesce(1).write.option("header", True).option("delimiter", ",").csv('cleanedData')
当我执行我的代码,它应该返回一个CSV文件,内容如下:(去掉第一行)
Name,Surname,Age,Class,Categ
Alfred,Nobel,69,10th,m
Isaac,Newton,55,9th,m
但我得到的是(只是用一个空字符串替换NULL值,但不删除该行):
Name,Surname,Age,Class,Categ
John,Snow,30,2nd,
Alfred,Nobel,69,10th,m
Isaac,Newton,55,9th,m
我该如何解决这个问题?
答
当我执行我的代码,它应该... ...(除去第一行)
它不应该。空字符串与NULL
不同。一般来说,你应该避免脆性手动解析和使用csv
读者指定nullValue
:
spark.read.option("nullValue", "NULL").option("header", "true").csv(dataset)
,但如果你要坚持你的方法,你应该使用None
lambda line: tuple(x if x != "NULL" else None for x in line.split(","))