我创建了一个返回未嵌套的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)