簡體   English   中英

Spark Java 中的多個逗號分隔值分隔行

[英]Multiple comma delimited values to separate row in Spark Java

我有以下數據集。 Column_1逗號分隔, Column_2Column_3用冒號分隔。 都是字符串列。 Column_1 中的每個逗號分隔值都應該是Column_1中的單獨行, Column_3應該填充Column_2Column_1中的等效值。 column_2column_3將被填充,並且不會同時填充兩者。

如果Column_1中的值的數量與column_2column_3中的等效值的數量不匹配,那么我們必須填充 null ( Column_1 : I,JK,L )

Column_1 Column_2 Column_3
A,B,C,D  NULL     N1:N2:N3:N4
E,F      N5:N6    NULL
G        NULL     N7
H        NULL     NULL
I,J      NULL     N8
K,L      N9       NULL

我必須將分隔值轉換為如下行。

Column_1 Column_2
A        N1
B        N2
C        N3
D        N4
E        N5
F        N6
G        N7
H        NULL
I        N8
J        NULL
K        N9
L        NULL

有沒有辦法在不使用 UDF 的情況下在 Java spark API 中實現這一點。

Scala 解決方案...應該在 Java 中類似。 您可以使用coalesce組合第 2 列和第 3 列,使用適當的分隔符將它們拆分,使用arrays_zip進行轉置explode並將結果分解為行。

df.select(
    explode(
        arrays_zip(
            split(col("Column_1"), ","), 
            coalesce(
                split(coalesce(col("Column_2"), col("Column_3")), ":"), 
                array()
            )
        )
    ).alias("result")
).select(
    "result.*"
).toDF(
    "Column_1", "Column_2"
).show

+--------+--------+
|Column_1|Column_2|
+--------+--------+
|       A|      N1|
|       B|      N2|
|       C|      N3|
|       D|      N4|
|       E|      N5|
|       F|      N6|
|       G|      N7|
|       H|    null|
|       I|      N8|
|       J|    null|
|       K|      N9|
|       L|    null|
+--------+--------+

這是另一種方式,使用transform function 可以迭代column_1的元素並創建稍后分解的 map:

df.withColumn(
    "mappings",
    split(coalesce(col("Column_2"), col("Column_3")), ":")
).selectExpr(
    "explode(transform(split(Column_1, ','), (x, i) -> map(x, mappings[i]))) as mappings"
).selectExpr(
    "explode(mappings) as (Column_1, Column_2)"
).show()

//+--------+--------+
//|Column_1|Column_2|
//+--------+--------+
//|       A|      N1|
//|       B|      N2|
//|       C|      N3|
//|       D|      N4|
//|       E|      N5|
//|       F|      N6|
//|       G|      N7|
//|       H|    null|
//|       I|      N8|
//|       J|    null|
//|       K|      N9|
//|       L|    null|
//+--------+--------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM