如何在JavaSpark中将多个列分解为若干行?

如何在JavaSpark中将多个列分解为若干行?,java,apache-spark,Java,Apache Spark,这是我的意见 sno var1 var2 var3 1 a|b x|y p|q 2 a1|b1|c1 x1|y1|z1 p1|q1|r1 我希望在不干扰sno的情况下将所有列分解为单独的行,如果我多次使用explode,我将得到重复的行 预期: sno var1 var2 var3 1 a x p 1 b y q 2 a1 x1 p1 2 a2 x2 p2 3 a3 x3 p3 但我得到的信息如下 sno var1 var2 var3 1 a 1 b 1 x 1 y 1 p 1 q 2

这是我的意见

sno var1 var2 var3
1  a|b x|y p|q
2 a1|b1|c1 x1|y1|z1 p1|q1|r1
我希望在不干扰sno的情况下将所有列分解为单独的行,如果我多次使用explode,我将得到重复的行

预期:

sno var1 var2 var3
1 a x p
1 b y q
2 a1 x1 p1
2 a2 x2 p2
3 a3 x3 p3
但我得到的信息如下

sno var1 var2 var3
1 a 
1 b
1 x
1 y
1 p 
1 q
2 a1
2 b1
2 c1
.....

我怎样才能把它改正过来。我正在寻找java spark中的解决方案。

我通过以下方式完成了它

df = df.withColumn("var_arr",functions.explode(functions.arrays_zip(
functions.split(df.col("var1","\\|"),
functions.split(df.col("var2","\\|"),
functions.split(df.col("var3","\\|")
)));

df = df.withColumn("v1", df.col("var_arr").getItem(0));
df = df.withColumn("v2", df.col("var_arr").getItem(1));
df = df.withColumn("v3", df.col("var_arr").getItem(2));
df.show();

我用下面的方法完成了它

df = df.withColumn("var_arr",functions.explode(functions.arrays_zip(
functions.split(df.col("var1","\\|"),
functions.split(df.col("var2","\\|"),
functions.split(df.col("var3","\\|")
)));

df = df.withColumn("v1", df.col("var_arr").getItem(0));
df = df.withColumn("v2", df.col("var_arr").getItem(1));
df = df.withColumn("v3", df.col("var_arr").getItem(2));
df.show();

如果您提供解析代码,我们可以帮助您正确地修改它。如果您提供解析代码,我们可以帮助您正确地修改它