- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
是否可以对 parquet 格式执行分布式并发写入? 是否可以在写入拼花文件时读取它们? 如果有并发读/写的方法,我有兴趣了解。 提前感谢您的帮助。 最佳答案 我最终得到了 Parquet 开发人员的
如何从命令行检查 Parquet 文件的内容? 我现在看到的唯一选择是 $ hadoop fs -get my-path local-file $ parquet-tools head local-f
我正在使用基于 Java(1.8) 的应用程序使用库创建 Parquet 文件 org.apache.avro.Schema 和 org.apache.parquet.hadoop.ParquetWr
我已经使用 pyspark 创建了多个 parquet 文件,现在我正在尝试将所有 parquet 文件合并为 1 个。我能够合并这些文件,但是在读取生成的文件时,我遇到了错误。以前有人遇到过这个问题
我创建了一个数据框,如下所示: expanded_1 = pd.DataFrame({"Point": [random.choice(points) for x in range(30000000)]
当我在 R 和 Python 中保存 Parquet 文件(使用 pyarrow)时,我得到一个保存在元数据中的箭头模式字符串。 如何读取元数据?它是 Flatbuffer 编码数据吗?架构的定义在哪
例如,pandas 的 read_csv有一个 chunk_size允许 read_csv 的参数在 CSV 文件上返回一个迭代器,以便我们可以分块读取它。 Parquet 格式以块的形式存储数据,但
我正在尝试运行最新版本的 Parquet 工具,但遇到了一些问题。出于某种原因org.apache.hadoop.conf.Configuration不在阴影的 jar 里。 (我对 v1.6.0 也
我正在使用 Parquet 框架来编写 Parquet 文件。 我使用此构造函数创建了 Parquet 作家- public class ParquetBaseWriter extends Parqu
使用 spark 和钻头,我可以查询本地 Parquet 文件。 presto 是否提供相同的功能? 换句话说,是否可以使用 presto 查询本地 Parquet 文件 - 无需通过 HDFS 或
我有一个加密的 parquet 数据文件,它被读取为一个输入流。我想从此输入流中提取单个 Parquet 记录。有什么办法可以做到这一点吗?在 avro 中,使用 DatumReader 是可能的。我
我知道 Apache Arrow Parquet 可以读取符合规范的 Delta 编码文件,但不能将它们写出。我想知道是否有任何常用的开源 C++/Python 库可以写出符合 Parquet 规范的
背景: DuckDB 允许直接查询 parquet 文件。例如con.execute("从'Hierarchy.parquet'中选择 *) Parquet 允许按列值对文件进行分区。当一个 Parq
有没有办法将一个巨大的 parquet 文件分成较小的文件(使用 Python)?保留所有列并划分行?谢谢 最佳答案 你可以用 dask 来做. import dask.dataframe as dd
我的 Parquet 文件为 800K 行 x 8.7K 列。我将其加载到 dask 数据框中: import dask.dataframe as dd dask_train_df = dd.read
我有数百个用 PyArrow 创建的 Parquet 文件。然而,其中一些文件的字段/列的名称(我们称其为 Orange)与原始列(称其为 Sporange)略有不同,因为其中一个使用了查询的变体。否
我正在尝试在配置单元中创建 Parquet 表。我可以创建它,但是当我运行 analyze table mytable compute statistics 时;我得到这个结果: numfiles=8
我知道 hdfs 会将文件拆分成大约 64mb 的 block 。我们有流式传输的数据,我们可以将它们存储到大文件或中等大小的文件中。列式文件存储的最佳大小是多少?如果我可以将文件存储到最小列为 64
我想使用 Apache 的 parquet-mr 项目通过 Java 以编程方式读取/写入 Parquet 文件。我似乎找不到任何有关如何使用此 API 的文档(除了查看源代码并查看它的使用方式)——
我在 Impala 中移动数据,而不是我的设计,我丢失了一些数据。我需要将数据从 Parquet 表复制回它们原来的非 Parquet 表。最初,开发人员使用脚本中的一个简单的一行来完成此操作。由于我
我是一名优秀的程序员,十分优秀!