我有一个数组[行],我想把它变成Dataset[Row]
或DataFrame
。
我是如何想出一系列行的?
好吧,我试图清除数据集中的空值:
.na.drop()
中的DataFrameNaFunctions
函数,因为它无法检测到某个单元格实际上何时有字符串"null"
。所以,我想出了以下一行来过滤掉所有列中的null
。
val outDF = inputDF.columns.flatMap { col => inputDF.filter(col + "!='' AND " + col + "!='null'").collect() }
问题是,outDF是Array[Row]
,因此问题!欢迎任何想法!
答案 0 :(得分:3)
这是你的代码如果有效的话会做的事情:
inputDF.columns.map {
col => inputDF.filter((inputDF(col) =!= "") and (inputDF(col) =!= "null"))
}.reduce(_ union _)
等等:
inputDF.where(inputDF.columns.map {
col => (inputDF(col) =!= "") and (inputDF(col) =!= "null")
}.foldLeft(lit(true))(_ and _))
是你想要的。
请注意,第一个解决方案使用以下数据创建非独占子集:
val inputDF = Seq(("1", "a"), ("2", ""), ("null", "")).toDF
结果将是:
+---+---+
| _1| _2|
+---+---+
| 1| a|
| 2| |
| 1| a|
+---+---+
对于我认为正确的解决方案:
+---+---+
| _1| _2|
+---+---+
| 1| a|
+---+---+
答案 1 :(得分:3)
我根据我的评论发布了答案。
df.na.drop(df.columns).where("'null' not in ("+df.columns.mkString(",")+")")
答案 2 :(得分:0)
根据Srinivas先生的评论,使用以下代码回答了这个问题:
//First drop all typical nulls
val prelimDF = inputDF.na.drop()
//Then drops all columns actually saying 'null'
val finalDF = prelimDF.na.drop(prelimDF.columns).where("'null' not in ("+prelimDF.columns.mkString(",")+")")
干杯!