【问题标题】:PySpark splitting DenseVector into Individual Columns on a large datasetPySpark 将 DenseVector 拆分为大型数据集上的各个列
【发布时间】: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


【解决方案1】:

相关的错误是 key not found: 3.0.

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

【讨论】:

  • 请检查编辑。 Schema如下:id:Double,features:Vector
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
相关资源
最近更新 更多