PySpark将DenseVector拆分为大型数据集上的单个列

时间:2017-02-03 12:02:51

标签: python azure apache-spark pyspark

我试图运行一个采用密集向量并将其拆分为单个列的函数。

df包含' ID'和'功能'作为列。下面的代码将其转换为以下形式: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中实现这个吗?

1 个答案:

答案 0 :(得分:1)

错误的相关部分是未找到密钥:3.0。

我99.99%确定它适用于样本,因为您拥有所有有效输入,但在整个数据集中,您可能会有一些线条破坏系统。可能有不同的原因,但检查row的架构和内容应该可以帮助您调查此问题。