我有一个具有以下类型的数据框:
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]|
#+----+----+----+----------+
Use getItem
从数组列中提取元素,在您的实际情况中替换col4
with 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|
#+----+----+----+----+----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)