【问题标题】:replace one column values with another Spark Java用另一个 Spark Java 替换一列值
【发布时间】:2020-02-14 02:22:10
【问题描述】:

我有一个格式为 df1 的数据框

+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| A    | z    | m    |
| B    | w    | n    |
| C    | x    | o    |
| A    | z    | n    |
| A    | p    | o    |
+------+------+------+

和另一个格式的数据帧df2

+------+------+
| Col1 | Col2 |
+------+------+
| 0-A  | 0-z  |
| 1-B  | 3-w  |
| 2-C  | 1-x  |
|      | 2-P  |
+------+------+-

我正在尝试使用 Spark Java 将 df1 的 Col1 和 Col2 中的值替换为 df2 中的值。

结束数据帧 df3 应该如下所示。

+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| 0-A  | 0-z  | m    |
| 1-B  | 3-w  | n    |
| 2-C  | 1-x  | o    |
| 0-A  | 0-z  | n    | 
| 0-A  | 2-p  | o    |
+------+------+------+

我正在尝试将 df1 的 column1 和 column2 中的所有值替换为 df2 的 col1 和 col2 中的值。 无论如何,我可以在 Spark Java 数据帧语法中实现这一点。?

我最初的想法是做以下事情。

String pattern1="\\p{L}+(?: \\p{L}+)*$";

df1=df1.join(df2, df1.col("col1").equalTo(regexp_extract(df2.col("col1"),pattern1,1)),"left-semi");

【问题讨论】:

  • 您是否有具有相同数据格式的实际数据,例如 0-A 和 A,是否可以检查 df1.col1 是否在 df2.col1 中?或 df1.col1 可以有任何值
  • 数据和我上面指定的格式一样。我只需要用df2中的值替换df1中的值。

标签: java apache-spark apache-spark-sql


【解决方案1】:

用下面的连接替换你上次的join 操作。

df1.alias("x").join(df2.alias("y").select(col("y.Col1").alias("newCol1")), col("x.Col1") === regexp_extract(col("newCol1"),"\\p{L}+(?: \\p{L}+)*$",0), "left")
              .withColumn("Col1", col("newCol1"))
              .join(df2.alias("z").select(col("z.Col2").alias("newCol2")), col("x.Col2") === regexp_extract(col("newCol2"),"\\p{L}+(?: \\p{L}+)*$",0), "left")
              .withColumn("Col2", col("newCol2"))
              .drop("newCol1", "newCol2")
              .show(false)

+----+----+----+
|Col1|Col2|Col3|
+----+----+----+
|2-C |1-x |o   |
|0-A |0-z |m   |
|0-A |0-z |n   |
|0-A |2-p |o   |
|1-B |3-w |n   |
+----+----+----+

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2018-11-04
    • 2021-04-24
    • 2017-07-10
    • 2018-06-20
    相关资源
    最近更新 更多