如何从spark scala中的一行中获取多行
我在spark中有一个数据帧,如下所示,我想转换不同行中关于第一列id的所有列如何从spark scala中的一行中获取多行,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我在spark中有一个数据帧,如下所示,我想转换不同行中关于第一列id的所有列 +----------------------------------+ | id code1 code2 code3 code4 code5 | +----------------------------------+ | 1 A B C D E | | 1 M N O P Q | | 1 P Q R S T
+----------------------------------+
| id code1 code2 code3 code4 code5 |
+----------------------------------+
| 1 A B C D E |
| 1 M N O P Q |
| 1 P Q R S T |
| 2 P A C D F |
| 2 S D F R G |
+----------------------------------+
我希望输出如下格式
+-------------+
| id code |
+-------------+
| 1 A |
| 1 B |
| 1 C |
| 1 D |
| 1 E |
| 1 M |
| 1 N |
| 1 O |
| 1 P |
| 1 Q |
| 1 P |
| 1 Q |
| 1 R |
| 1 S |
| 1 T |
| 2 P |
| 2 A |
| 2 C |
| 2 D |
| 2 F |
| 2 S |
| 2 D |
| 2 F |
| 2 R |
| 2 G |
+-------------+
谁能帮我这里我将如何获得上述输出与火花和scala
df.select(col("id"),explode(concat_ws(",",Seq(col(code1),col("code2"),col("code3"),col("code4"),col("code5")))))
基本上,这个想法是先concat
所有必需的列,然后explode
it使用,并且drop
函数应该有您想要的输出
df.withColumn("code", explode(array("code1", "code2", "code3", "code4", "code5")))
.drop("code1", "code2", "code3", "code4", "code5")
或
根据undefined_变量的定义,您只需使用select
df.select($"id", explode(array("code1", "code2", "code3", "code4", "code5")).as("code"))
不,这不是你提到的上述问题的重复。这个问题与json格式无关。谢谢@ramesh,它的工作符合我的预期。。这是我一直在寻找的:)谢谢@DivasNikhra,如果答案有帮助,请接受并投票