【发布时间】:2017-02-15 14:20:21
【问题描述】:
我正在尝试运行一个函数,该函数采用密集向量并将其拆分为单独的列。
df 包含 'ID' 和 'feature' 作为列。下面的代码将其转换为以下形式:ID、_2、_3、_4... 其中 _2、_3 是在拆分“特征”列向量时创建的列
def extract(row):
return (row.ID, ) + tuple(float(x) for x in row.feature.values)
df = df.rdd.map(extract).toDF(["ID"])
当我在具有近一百万个 ID 的整个 df 上执行此代码时,它会失败。
但是,如果我抽取 100 行样本并运行相同的代码,它就可以完美运行。据我了解,这是一个内存问题。在更大的数据集上执行此操作的有效方法是什么?任何帮助,将不胜感激。我正在使用 Spark 2.0+
编辑:错误消息: Spark Error Snapshot
最新编辑:数据清理和预处理发生在创建 df 之前,因此 df 没有空值。
附加信息:所以,这个链接How to explode columns? 对我的问题有一个基于 scala 的答案。问题是,我可以在 pyspark 中实现它吗?
【问题讨论】:
-
根据你的错误信息,我认为@Chobeat 的判断可能是对的。也许你应该先检查你的数据,然后做一些数据清洗的操作。有什么更新吗?
-
有没有更好的方法来实现我想要的?基本上需要将具有'n'值的向量拆分为n列。
标签: python azure apache-spark pyspark