Xml 横向视图/使用多个列在Spark中分解,获得重复项

Xml 横向视图/使用多个列在Spark中分解,获得重复项,xml,scala,apache-spark,hadoop,hive,Xml,Scala,Apache Spark,Hadoop,Hive,我有下面的dataframe,其中一些列包含数组。 (我们使用的是spark 1.6) 我期望得到以下结果: +--------------------+--------------+------------------+--------------+--------------------+-------------+ | UserName| explod | explod2 |explod3 |explod4

我有下面的dataframe,其中一些列包含数组。 (我们使用的是spark 1.6)

我期望得到以下结果:

+--------------------+--------------+------------------+--------------+--------------------+-------------+
|            UserName|     explod   |    explod2       |explod3       |explod4             |explod5      |
+--------------------+--------------+------------------+--------------+--------------------+-------------+
|NNNNNNNNNNNNNNNNN...|      Main    |1777203           |    GBP      |     CR              |    143      |
|NNNNNNNNNNNNNNNNN...|Individual    |1777203           |    GBP      |     CR              |    143      |
----------------------------------------------------------------------------------------------------------
我试过横向观察:

sqlContext.sql("SELECT `UserName`, explod, explod2, explod3, explod4, explod5 FROM sourceDF
LATERAL VIEW explode(`col1`) sourceDF AS explod 
LATERAL VIEW explode(`col2`) explod AS explod2 
LATERAL VIEW explode(`col3`) explod2 AS explod3 
LATERAL VIEW explode(`col4`) explod3 AS explod4 
LATERAL VIEW explode(`col5`) explod4 AS explod5")
但我得到的是笛卡尔积,有很多重复项。 我也尝试过同样的方法,用withcolumn方法分解所有列,但仍然得到很多重复项

.withColumn("col1", explode($"col1"))...
当然,我可以对最终的数据帧进行区分,但这不是一个优雅的解决方案。 有没有办法在不获取所有这些重复项的情况下分解列


谢谢

如果您使用的是Spark 2.4.0或更高版本,
arrays\u-zip
使任务更容易完成

val df = Seq(
  ("foo",
   Seq("Main", "Individual"),
   Seq(1777203, 1777203),
   Seq("GBP", "GBP"),
   Seq("CR", "CR"),
   Seq(143, 143)))
  .toDF("UserName", "col1", "col2", "col3", "col4", "col5")

df.select($"UserName",
          explode(arrays_zip($"col1", $"col2", $"col3", $"col4", $"col5")))
  .select($"UserName", $"col.*")
  .show()
输出:

+--------+----------+-------+----+----+----+
|UserName|      col1|   col2|col3|col4|col5|
+--------+----------+-------+----+----+----+
|     foo|      Main|1777203| GBP|  CR| 143|
|     foo|Individual|1777203| GBP|  CR| 143|
+--------+----------+-------+----+----+----+

Hi的可能重复,该问题是针对Spark>2.X的,我们使用Spark 1.6,因此该问题提供的大多数解决方案都不起作用。Hi@ollik1,我们使用Spark 1.6,因此“arrays\u-zip”方法不可用。
+--------+----------+-------+----+----+----+
|UserName|      col1|   col2|col3|col4|col5|
+--------+----------+-------+----+----+----+
|     foo|      Main|1777203| GBP|  CR| 143|
|     foo|Individual|1777203| GBP|  CR| 143|
+--------+----------+-------+----+----+----+