【问题标题】:Spark how to merge two column based on a conditionSpark如何根据条件合并两列
【发布时间】:2019-08-02 22:40:53
【问题描述】:

我有一个包含 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|
+-------+

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案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()
    

    【讨论】:

      【解决方案2】:

      使用 SparkSql

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

      【讨论】:

        【解决方案3】:

        使用 Spark Scala

        使用 whenotherwise 如果我们对于列只有两种情况,则不需要再次使用 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
        

        请在附件中找到相同的屏幕截图。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-13
          • 2020-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-10
          • 2021-09-18
          相关资源
          最近更新 更多