我有一个包含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|
+-------+
答案 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
请找到附件的截图。