【发布时间】:2020-04-29 14:14:25
【问题描述】:
Spark 2.3中arrays_zip的等价函数怎么写?
来自 Spark 2.4 的源代码
def arrays_zip(*cols):
"""
Collection function: Returns a merged array of structs in which the N-th struct contains all
N-th values of input arrays.
:param cols: columns of arrays to be merged.
>>> 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)])]
"""
sc = SparkContext._active_spark_context
return Column(sc._jvm.functions.arrays_zip(_to_seq(sc, cols, _to_java_column)))
如何在 PySpark 中实现相似?
【问题讨论】:
-
你大概可以测试一下:
f=lambda x,y:list(zip(x,y));myudf = F.udf(f,ArrayType(StructType([StructField('vals1',IntegerType(),False),StructField('vals2',IntegerType(),False)])))后跟df.select(myudf(F.col('vals1'),F.col('vals2'))).collect()不确定因此不作为答案发布,如果您尚未将导入命名为F,请删除F前缀
标签: python arrays apache-spark pyspark