Apache spark Spark数据帧选择空值
我有一个spark数据框,其中很少列为null。我需要创建一个新的dataframe,添加一个新的列“error_desc”,它将提到每一行都有空值的所有列。我需要动态地执行此操作,而不必提及每个列名 如果我的数据框在下面Apache spark Spark数据帧选择空值,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个spark数据框,其中很少列为null。我需要创建一个新的dataframe,添加一个新的列“error_desc”,它将提到每一行都有空值的所有列。我需要动态地执行此操作,而不必提及每个列名 如果我的数据框在下面 +-----+------+------+ |Rowid|Record|Value | +-----+------+------+ | 1| a| b| | 2| null| d| | 3| m| null| +-----
+-----+------+------+
|Rowid|Record|Value |
+-----+------+------+
| 1| a| b|
| 2| null| d|
| 3| m| null|
+-----+------+------+
我的最终数据帧应该是
+-----+------+-----+--------------+
|Rowid|Record|Value| error_desc|
+-----+------+-----+--------------+
| 1| a| b| null|
| 2| null| d|record is null|
| 3| m| null| value is null|
+-----+------+-----+--------------+
我在输入数据框中添加了几行,以涵盖更多情况。您不需要硬编码任何列。使用下面的
UDF
,它将提供您想要的输出
scala> import org.apache.spark.sql.Row
scala> import org.apache.spark.sql.expressions.UserDefinedFunction
scala> df.show()
+-----+------+-----+
|Rowid|Record|Value|
+-----+------+-----+
| 1| a| b|
| 2| null| d|
| 3| m| null|
| 4| null| d|
| 5| null| null|
| null| e| null|
| 7| e| r|
+-----+------+-----+
scala> def CheckNull:UserDefinedFunction = udf((Column:String,r:Row) => {
| var check:String = ""
| val ColList = Column.split(",").toList
| ColList.foreach{ x =>
| if (r.getAs(x) == null)
| {
| check = check + x.toString + " is null. "
| }}
| check
| })
scala> df.withColumn("error_desc",CheckNull(lit(df.columns.mkString(",")),struct(df.columns map col: _*))).show(false)
+-----+------+-----+-------------------------------+
|Rowid|Record|Value|error_desc |
+-----+------+-----+-------------------------------+
|1 |a |b | |
|2 |null |d |Record is null. |
|3 |m |null |Value is null. |
|4 |null |d |Record is null. |
|5 |null |null |Record is null. Value is null. |
|null |e |null |Rowid is null. Value is null. |
|7 |e |r | |
+-----+------+-----+-------------------------------+
您能否提供示例输入数据框,并将其格式化为代码,以便我们了解您的问题。Rowid记录值1 a b 2 null d 3 m nullI已编辑您的问题格式以便更好地理解,请提交it@Nikk完成。。你能帮忙吗?这些值来自我正在动态读取的文件。。所以我不想在代码中写列名。你能帮我理解这个-struct(df.columns map col:*)吗。它只是整行的结构。如何为整行的结构定义架构?我想把一切都当作绳子