dataframe - 如何在pyspark中连接两个数组

标签 dataframe pyspark

我有一个 pyspark 数据框。

例子:

ID   |    phone   |  name <array>  | age <array>
-------------------------------------------------
12   | 827556     | ['AB','AA']    |  ['CC']
-------------------------------------------------
45   |  87346     |  null          |   ['DD']
-------------------------------------------------
56   |  98356     |  ['FF']        |  null
-------------------------------------------------
34   |  87345     |   ['AA','BB']  |  ['BB']

我想连接 2 个数组名称和年龄。 我是这样做的:

df = df.withColumn("new_column", F.concat(df.name, df.age))
df = df.select("ID", "phone", "new_column")

但我缺少一些列,似乎是 concat function适用于 String 而不是数组并删除重复项:

预期结果:

ID   |    phone   |  new_column <array>  
----------------------------------------
12   | 827556     | ['AB','AA','CC']    
----------------------------------------
45   |  87346     |  ['DD']             
----------------------------------------
56   |  98356     |  ['FF']        
----------------------------------------
34   |  87345     |   ['AA','BB']    
----------------------------------------

知道我正在使用 Spark version < 2.4 后,如何在 pyspark 中连接 2 个数组?

谢谢

最佳答案

您也可以使用 selectExpr

testdata = [(0, ['AB','AA'],  ['CC']), (1, None, ['DD']), (2,  ['FF'] ,None), (3,  ['AA','BB'] , ['BB'])]
df = spark.createDataFrame(testdata, ['id', 'name', 'age'])

>>> df.show()
+---+--------+----+
| id|    name| age|
+---+--------+----+
|  0|[AB, AA]|[CC]|
|  1|    null|[DD]|
|  2|    [FF]|null|
|  3|[AA, BB]|[BB]|
+---+--------+----+

>>> df.selectExpr('''array(concat_ws(',',name,age)) as joined''').show()
+----------+
|    joined|
+----------+
|[AB,AA,CC]|
|      [DD]|
|      [FF]|
|[AA,BB,BB]|
+----------+

关于dataframe - 如何在pyspark中连接两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604466/

相关文章:

apache-spark - 数据 block 中的存储选项

hadoop - 在 PySpark 中设置 YARN 队列

python - 如何使用 Spark SQL 识别 Hive 表中的分区列

python - 将数据帧的列值聚合到新的数据帧

python-2.7 - 如何识别从今天(包括今天)到过去和 future (不包括周末)的三个工作日并将它们放入 Pandas 数据框中?

python - 为什么 Pandas 数据框中按日期分组如此慢?

pyspark - 当 2 个其他值与 PySpark 中的 2 个不同表匹配时更新特定值

python - 如何在Python中知道日期格式的数据帧是否包含在时间间隔内(矢量化)

python - 使用索引按系列设置多索引 DataFrame 列

python - 在 pyspark 中应用用户定义聚合函数的替代方法