在pysp中如何从数组中提取一个元素

2024-09-28 21:02:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,类型如下

col1|col2|col3|col4
xxxx|yyyy|zzzz|[1111],[2222]

我希望我的输出是以下类型

col1|col2|col3|col4|col5
xxxx|yyyy|zzzz|1111|2222

我的col4是一个数组,我想把它转换成一个单独的列。需要做什么?

我用flatmap看到了很多答案,但是它们增加了一行,我只想把元组放在另一列,但是放在同一行

以下是我的实际架构:

root
 |-- PRIVATE_IP: string (nullable = true)
 |-- PRIVATE_PORT: integer (nullable = true)
 |-- DESTINATION_IP: string (nullable = true)
 |-- DESTINATION_PORT: integer (nullable = true)
 |-- collect_set(TIMESTAMP): array (nullable = true)
 |    |-- element: string (containsNull = true)

也可以请一些人帮助我解释数据帧和RDD的


Tags: 数据iptrue类型stringportprivatecol2
1条回答
网友
1楼 · 发布于 2024-09-28 21:02:08

创建示例数据:

from pyspark.sql import Row
x = [Row(col1="xx", col2="yy", col3="zz", col4=[123,234])]
rdd = sc.parallelize([Row(col1="xx", col2="yy", col3="zz", col4=[123,234])])
df = spark.createDataFrame(rdd)
df.show()
#+----+----+----+----------+
#|col1|col2|col3|      col4|
#+----+----+----+----------+
#|  xx|  yy|  zz|[123, 234]|
#+----+----+----+----------+

使用getItem从数组列中提取元素,在实际情况下,将col4替换为collect_set(TIMESTAMP)

df = df.withColumn("col5", df["col4"].getItem(1)).withColumn("col4", df["col4"].getItem(0))
df.show()
#+----+----+----+----+----+
#|col1|col2|col3|col4|col5|
#+----+----+----+----+----+
#|  xx|  yy|  zz| 123| 234|
#+----+----+----+----+----+

相关问题 更多 >