Spark如何根据条件合并两列

时间:2019-08-02 12:21:58

标签: apache-spark apache-spark-sql

我有一个包含3列的spark dataFrame,并且我想基于第三个合并两个主题,这是一个示例:

+---+---+---+
|AAA|bbb|ccc|
+---+---+---+
|AAA|BBB|  E|
|AAA|BBB|  R|
|AAA|BBB|  E|
|AAA|BBB|  R|
|AAA|BBB|  R|
|AAA|BBB|  E|
+-----------+

我想在CCC列的值为E时使用AAA列的值,而在CCC是R时使用BBB 这是输出:

+---+---+
|NEW|ccc|
+---+---+
|AAA|  E|
|BBB|  R|
|AAA|  E|
|BBB|  R|
|BBB|  R|
|AAA|  E|
+-------+

3 个答案:

答案 0 :(得分:1)

可以使用when完成此操作。 (PySpark解决方案如下所示)

from pyspark.sql.functions import when
df.withColumn('New',when(df.ccc=='E',df.aaa).when(df.ccc=='R',df.bbb)).show()

答案 1 :(得分:0)

使用SparkSql

SELECT
CASE
    WHEN CCC='E' THEN AAA    
    ELSE BBB
END AS new,CCC
FROM dataset;

答案 2 :(得分:0)

  

使用Spark Scala

带有 when 否则的情况下,如果关于列只有两种情况,则无需再次使用。

var df=spark.createDataFrame(Seq(("AAA","BBB","E"),("AAA","BBB","R"),("AAA","BBB","E"),("AAA","BBB","R"),("AAA","BBB","R"),("AAA","BBB","E"))).toDF("AAA","bbb","ccc")
df.withColumn("New",when(col("CCC").equalTo("E"),col("AAA")).otherwise(col("BBB"))).show

请找到附件的截图。

enter image description here