我试图运行一个采用密集向量并将其拆分为单个列的函数。
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中实现这个吗?
答案 0 :(得分:1)
错误的相关部分是未找到密钥:3.0。
我99.99%确定它适用于样本,因为您拥有所有有效输入,但在整个数据集中,您可能会有一些线条破坏系统。可能有不同的原因,但检查row
的架构和内容应该可以帮助您调查此问题。