Apache spark pyspark-合并2列集合

Apache spark pyspark-合并2列集合,apache-spark,pyspark,pyspark-sql,Apache Spark,Pyspark,Pyspark Sql,我有一个spark数据框,它有两个由函数collect_set组成的列。我想把这两列集合合并成一列集合。我应该怎样做?它们都是一组字符串 例如,我通过调用collect_set形成了两列 Fruits | Meat [Apple,Orange,Pear] [Beef, Chicken, Pork] 如何将其转换为: Food [Apple,Orange,Pear, Beef, Chicken, Pork] 非常感谢您事先提供的帮助,

我有一个spark数据框,它有两个由函数collect_set组成的列。我想把这两列集合合并成一列集合。我应该怎样做?它们都是一组字符串

例如,我通过调用collect_set形成了两列

Fruits                  |    Meat
[Apple,Orange,Pear]          [Beef, Chicken, Pork]
如何将其转换为:

Food

[Apple,Orange,Pear, Beef, Chicken, Pork]

非常感谢您事先提供的帮助

,因为您有
数据帧
作为

+---------------------+---------------------+
|Fruits               |Meat                 |
+---------------------+---------------------+
|[Pear, Orange, Apple]|[Chicken, Pork, Beef]|
+---------------------+---------------------+
您可以编写一个
udf
函数将两列的集合合并为一列

import org.apache.spark.sql.functions_
def mergeCols=udf((水果:mutable.WrappedArray[String],肉:mutable.WrappedArray[String])=>水果+肉)
然后调用
udf
函数

df.withColumn(“食品”),mergeCols(col(“水果”),col(“肉”))。show(假)
您应该拥有所需的最终
数据帧

+---------------------+---------------------+------------------------------------------+
|Fruits               |Meat                 |Food                                      |
+---------------------+---------------------+------------------------------------------+
|[Pear, Orange, Apple]|[Chicken, Pork, Beef]|[Pear, Orange, Apple, Chicken, Pork, Beef]|
+---------------------+---------------------+------------------------------------------+

比如说,
df
has

+--------------------+--------------------+
|              Fruits|                Meat|
+--------------------+--------------------+
|[Pear, Orange, Ap...|[Chicken, Pork, B...|
+--------------------+--------------------+
然后

导入itertools
df.rdd.map(lambda x:[itertools.chain(x.Fruits,x.Meat)中的项目对应项目)]).collect()
创建一组
水果
组合成一组,即

[[u'Pear', u'Orange', u'Apple', u'Chicken', u'Pork', u'Beef']]


希望这有帮助

我在Python中也发现了这一点,因此这里是Ramesh Python解决方案的一个端口:

df=spark.createDataFrame([([‘梨’、‘橙’、‘苹果’、[‘鸡肉’、‘猪肉’、‘牛肉’]),
(“水果”、“肉”))
df.show(1,False)
从pyspark.sql.functions导入udf
mergeCols=udf(羔羊水果、肉:水果+肉)
df.withColumn(“食品”),mergeCols(col(“水果”),col(“肉”))。show(1,False)
输出:

+---------------------+---------------------+
|Fruits               |Meat                 |
+---------------------+---------------------+
|[Pear, Orange, Apple]|[Chicken, Pork, Beef]|
+---------------------+---------------------+
+---------------------+---------------------+------------------------------------------+
|Fruits               |Meat                 |Food                                      |
+---------------------+---------------------+------------------------------------------+
|[Pear, Orange, Apple]|[Chicken, Pork, Beef]|[Pear, Orange, Apple, Chicken, Pork, Beef]|
+---------------------+---------------------+------------------------------------------+
感谢拉梅什


编辑:请注意,您可能必须手动指定列类型(不确定为什么它仅在某些情况下对我有效,而没有明确的类型规范-在其他情况下,我得到的是字符串类型的列)

从pyspark.sql.types导入*
mergeCols=udf(lambda水果,肉:水果+肉,ArrayType(StringType()))

请提供更多信息,如数据帧的结构,并举例说明python的情况?我似乎找不到可变的。wrappedarray这都在scala中:)