Python 如何在pyspark中从数组中提取元素
我有一个以下类型的数据框Python 如何在pyspark中从数组中提取元素,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我有一个以下类型的数据框 col1|col2|col3|col4 xxxx|yyyy|zzzz|[1111],[2222] col1|col2|col3|col4|col5 xxxx|yyyy|zzzz|1111|2222 我希望我的输出是以下类型 col1|col2|col3|col4 xxxx|yyyy|zzzz|[1111],[2222] col1|col2|col3|col4|col5 xxxx|yyyy|zzzz|1111|2222 我的col4是一个数组,我想把它转换成一个单
col1|col2|col3|col4
xxxx|yyyy|zzzz|[1111],[2222]
col1|col2|col3|col4|col5
xxxx|yyyy|zzzz|1111|2222
我希望我的输出是以下类型
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的创建示例数据:
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\u set(TIMESTAMP)
:
您的数据帧的模式是什么?你能显示df.printSchema()吗?嗨,我用我的实际模式编辑了这个问题。数组列中的所有单元格都有相同数量的元素吗?总是2?如果另一行在数组中有三个元素呢?不,所有元素正好有两个元素。因为数组中的元素是开始日期和结束日期。如果您能帮助我,这也是我的实际要求@Lydia请格外小心,确保您知道在修改代码时正在做什么:您的编辑破坏了一个完美的答案,导致它抛出异常(将其还原为OP的原始版本)…你有没有办法将迭代推广到原始col4数组上?@Amesys你有没有尝试过分解列表理解?我有一个后续问题,删除链接,提前谢谢@精神病