web-dev-qa-db-ja.com

pysparkの配列から要素を抽出する方法

次のタイプのデータフレームがあります

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

出力を次のタイプにしたい

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

私のcol4は配列で、別の列に変換したいと思います。何をする必要がありますか?

私はフラットマップで多くの答えを見ましたが、それらは行を増やしています、タプルだけを別の列に入れたいが同じ行に入れたいです

以下は私の実際のスキーマです:

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の両方の説明を手伝ってくれる人もいます

10
AnmolDave

サンプルデータを作成します。

_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|
#+----+----+----+----+----+
_
23
Psidom