pyspark arrays_zip排除索引

时间:2019-01-29 02:01:25

标签: pyspark

我正在使用v2.4中新的pyspark arrays_zip函数压缩以下数组:

["ABK","APR","ABF"]
["R0789","R0602","E039"])

结果是:

[{"0":"ABK","1":"R0789"},{"0":"APR","1":"R0602"},{"0":"ABF","1":"E039"}]

我如何获得以下结果?

[{"ABK":"R0789"},{"APR":"R0602"},{"ABF":"E039"}]

我不是直接压缩列。这些列是JSON,因此我正在使用get_json_object获取字符串数组,即它看起来像一个数组,但实际上是一个字符串。然后,我使用split函数将字符串转换为自定义函数中的实际数组。

arrays_zip(myStringArrayToArray(get_json_object(...

pyspark文档显示了此示例,并且不显示/提及结果中包含的索引值:

from pyspark.sql.functions import arrays_zip
df = spark.createDataFrame([(([1, 2, 3], [2, 3, 4]))], ['vals1', 'vals2'])
df.select(arrays_zip(df.vals1, df.vals2).alias('zipped')).collect()
[Row(zipped=[Row(vals1=1, vals2=2), Row(vals1=2, vals2=3), Row(vals1=3, vals2=4)])]

更新:我已经确认我的数组示例与文档中提供的示例结果匹配。因为我对数组使用arrays_zip,所以它使用索引。如果它们是列(如文档),则它们将是列名(而不是索引)。因此,我正在做一些字符串到数组的转换,这并不是这里的问题。

我期望arrays_zip的行为更像Python zip函数,例如

a1 = [1, 2, 3]
a2 = ['one', 'two', 'three']

zip(a1, a2)
{(2, 'two'), (3, 'three'), (1, 'one')}

也许唯一的选择是UDF。

0 个答案:

没有答案