1

我目前正在使用scala中的数据框,并且无法弄清楚如果该行中的值为null,那么如何填充具有Seq.empty[Row]值的列。我知道有df.na.fill函数,但它似乎只处理字符串,双打或我的理解整数。在斯卡拉填充一个空值Spark数据框

本质上,我希望能够填充空行与Seq.empty[Row],嵌套字段。我相信这是可能的,但是看起来我在网上找不到像它这样的东西。

表的例子 -

+-----------+-------------------+-----------+---------+------------------+ | field| field2| | values| +-----------+-------------------+-----------+----------+------------------+ | stuff2| stuff 2| | null | | stuff1| stuff1| | [val 1,val2,..]| +-----------+-------------------+-----------+----------+------------------+

从本质上讲,我想要那个空变成空数组像这样:[]。任何帮助将不胜感激,谢谢。

回答

2

您可以使用udf和​​3210(如下所示)。

val df = Seq(("stuff2","stuff2",null), ("stuff2","stuff2",Array("value1","value2")),("stuff3","stuff3",Array("value3"))).toDF("field","field2","values") 
df.show() 

import org.apache.spark.sql.functions.udf 
val array_ = udf(() => Array.empty[String]) 

val df2 = df.withColumn("values", coalesce(df("values"), array_())) 
df2.show() 
+0

完美地将'Row'的'null'转换为空'Sequence'的方法很困难,因为'coalesce'取决于列的类型是否正确。我无法有效推断列的类型,我认为这是一个不同的问题。不过你的观点仍然存在,所以谢谢你的回答。 –

+0

使用'udf'注入非文字值的聪明黑客! – metasim