gpt4 book ai didi

apache-spark - Parquet 如何处理 SparseVector 列?

转载 作者:行者123 更新时间:2023-12-02 17:00:56 25 4
gpt4 key购买 nike

我是 PySpark 的新手。我正在构建一个 tfidf 并想将它作为中间结果存储在磁盘中。现在,IDF 评分为我提供了一个 SparseVector 表示。

但是,当尝试将其保存为 Parquet 时,我遇到了 OOM。我不确定它是否在内部将 SparseVector 转换为 Dense,因为在这种情况下它会导致大约 25k 列并且根据 this线程,以列格式保存如此大的数据会导致 OOM。

那么,您知道会发生什么情况吗?我的执行程序内存为 8g,并在 2g CSV 文件上运行。

我应该尝试增加内存还是将其保存在 CSV 而不是 Parquet 中?任何帮助表示赞赏。提前致谢。

更新 1

正如所指出的,Spark 执行惰性求值,错误可能是由于上游阶段,我在写入之前尝试了 show 和 collect。他们似乎运行良好,没有抛出错误。那么,是否仍然存在与 Parquet 相关的问题,或者我需要进行一些其他调试?

最佳答案

Parquet 不提供对 Spark ML/MLlib Vectors 的原生支持,Spark SQL 中的这些一等公民也不是。

相反,Spark 使用具有三个字段的 struct 字段表示 Vectors:

  • 类型 - 字节类型
  • size - IntegerType(可选,仅适用于 SparseVectors)
  • indices - ArrayType(IntegerType)(可选,仅适用于 SparseVectors)
  • - ArrayType(DoubleType)

并使用元数据将它们与普通 structs 和 UDT 包装器区分开来,以映射回外部类型。不需要在稀疏表示和密集表示之间进行转换。尽管如此,根据数据的不同,这种表示可能需要与全密集阵列相当的内存。

请注意,写入时的 OOM 不一定与写入过程本身相关。由于 Spark 通常是惰性的,因此异常可能由任何上游阶段引起。

关于apache-spark - Parquet 如何处理 SparseVector 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54224125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com