pyspark:将结构分解为列

时间:2018-05-25 10:30:35

标签: pyspark user-defined-functions

我创建了一个返回未嵌套的StructType的udf。只是一个带有字段名称的混合类型(int,float)的数组。我想将它们分解为单独的列。请注意,这将创建大约50个新列。通过谷歌搜索我找到了这个解决方案:

df_split = df.select('ID', 'my_struct.*')

这很有效。然而,表现绝对可怕,例如。无法使用。检查群集节点,这也只使用1个核心。但这只能解释问题的一小部分。

那么什么是实现我的目标的好方法,为什么上述解决方案如此缓慢?

编辑:

似乎是udf和分裂的特定组合会导致性能不佳。这很慢:

df_udf = df.withColumn('udf', my_udf(df.input))
df_exploded = df_udf.select('input', 'udf.*')
df_exploded.show(5)

这很快:

df_udf = df.withColumn('udf', my_udf(df.input))
df_udf.cache()
df_exploded = df_udf.select('input', 'udf.*')
df_exploded.show(5)

0 个答案:

没有答案