[英]Spark (Scala): How to turn an Array[Row] into either a DataSet[Row] or a DataFrame?
我有一个Array [Row],我想将其转换为Dataset[Row]
或DataFrame
。
我如何提出一个行数组?
好吧,我正在尝试从数据集中清除null:
.na.drop()
函数从DataFrameNaFunctions
,因为它不能检测时,电池居然有字符串"null"
。 因此,我想出了以下行来过滤所有列中的null
。
val outDF = inputDF.columns.flatMap { col => inputDF.filter(col + "!='' AND " + col + "!='null'").collect() }
问题是,outDF是Array[Row]
,因此是一个问题! 任何想法欢迎!
这是您的代码可以正常工作的方式:
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|
+---+---+
我根据我的评论发布答案。
df.na.drop(df.columns).where("'null' not in ("+df.columns.mkString(",")+")")
根据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(",")+")")
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.