Spark Apache没有删除“NULL”值

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