2017-09-13 71 views
1

我试图用SparkSQL来处理dataframe.The数据框的样子:在其中任何使用Sparksql工会与空值两列

A B 
    1 Null 
    2 Null 
    Null 3 
    Null 4 

如何使用加入或结合而形成新列C使数据帧可以是:

A B  c 
    1 Null 1 
    2 Null 2 
    Null 3  3 
    Null 4  4 

*它保证了A和B不能同时为空或者非空;他们中的任何一个都会有价值。

回答

1

您可以使用​​3210函数;按照docs

它返回的第一列是不为空,则返回null所有输入都是 空。例如,如果a不为空,或者b如果a为空且b不为空,或者c如果a和b都为空,但c为 ,则合并(a,b,c)将返回a不为空。

val df = Seq((Some(1), null), (Some(2), null), (null, Some(3)), (null, Some(4))).toDF("A", "B") 
// df: org.apache.spark.sql.DataFrame = [A: int, B: int] 

df.withColumn("C", coalesce($"A", $"B")).show 
+----+----+---+ 
| A| B| C| 
+----+----+---+ 
| 1|null| 1| 
| 2|null| 2| 
|null| 3| 3| 
|null| 4| 4| 
+----+----+---+ 
相关问题