如何使用 spark 转换连接 pyspark 数据框中两个数组的相应元素?
How to concat corresponding elements of two arrays in pypspark dataframe with spark transformation?
我有两个 ArrayType 列,我想将它们的相应值连接到一个新的 StringType 列中。
我想知道是否可以使用 spark 转换而不是 UDF。
input:
col1 col2
['1','2'] ['ABC', 'DEF']
output:
col3
'1:ABC_2:DEF'
试试这个:
from pyspark.sql import functions as F
a = [(['1','2'], ['ABC', 'DEF'])]
df = spark.createDataFrame(a, ['col1', 'col2'])
df.show()
+------+----------+
| col1| col2|
+------+----------+
|[1, 2]|[ABC, DEF]|
+------+----------+
现在我们从两列创建一个映射,并转换成json字符串:
df = df.withColumn('col3', F.map_from_arrays('col1', 'col2'))
df = df.withColumn('col3', F.to_json('col3'))
# you can now just operate on the string:
df = df.withColumn('col3', F.regexp_replace('col3', '"', ''))
df = df.withColumn('col3', F.regexp_replace('col3', ',', '_'))
df = df.withColumn('col3', F.regexp_replace('col3', '\{', ''))
df = df.withColumn('col3', F.regexp_replace('col3', '\}', ''))
df.show(truncate=False)
+------+----------+-----------+
|col1 |col2 |col3 |
+------+----------+-----------+
|[1, 2]|[ABC, DEF]|1:ABC_2:DEF|
+------+----------+-----------+
我有两个 ArrayType 列,我想将它们的相应值连接到一个新的 StringType 列中。
我想知道是否可以使用 spark 转换而不是 UDF。
input:
col1 col2
['1','2'] ['ABC', 'DEF']
output:
col3
'1:ABC_2:DEF'
试试这个:
from pyspark.sql import functions as F
a = [(['1','2'], ['ABC', 'DEF'])]
df = spark.createDataFrame(a, ['col1', 'col2'])
df.show()
+------+----------+
| col1| col2|
+------+----------+
|[1, 2]|[ABC, DEF]|
+------+----------+
现在我们从两列创建一个映射,并转换成json字符串:
df = df.withColumn('col3', F.map_from_arrays('col1', 'col2'))
df = df.withColumn('col3', F.to_json('col3'))
# you can now just operate on the string:
df = df.withColumn('col3', F.regexp_replace('col3', '"', ''))
df = df.withColumn('col3', F.regexp_replace('col3', ',', '_'))
df = df.withColumn('col3', F.regexp_replace('col3', '\{', ''))
df = df.withColumn('col3', F.regexp_replace('col3', '\}', ''))
df.show(truncate=False)
+------+----------+-----------+
|col1 |col2 |col3 |
+------+----------+-----------+
|[1, 2]|[ABC, DEF]|1:ABC_2:DEF|
+------+----------+-----------+