Mat*_*usz 5 java apache-spark parquet pyspark pyarrow
我正在处理(使用 pyspark)可能包含大字符串值的数据帧。简单来说,该列包含来自 API 的响应,该响应是大小最大为 20 MB 的字符串。通常该字符串小于 10 MB。我注意到,当字符串大小达到一定大小(大约 16 MB)时,读取这些 parquet 文件非常慢并且消耗大量内存(我的 Spark 集群会抛出 OOM)。对于 Spark 和 pyarrow 都是如此,但对于 pandas 则不然(我猜是因为pyarrow 的 cpp 实现)。
有什么办法可以让它更快。有人可以证实我的假设,即这与 java 中处理大字符串的内存分配有关吗?
以下是 parquet-inspect 的输出:
############ file meta data ############
created_by: parquet-mr version 1.12.2 (build 77e30c8093386ec52c3cfa6c34b7ef3321322c94)
num_columns: 1
num_rows: 100
num_row_groups: 1
format_version: 1.0
serialized_size: 400
############ Columns ############
api_response
############ Column(ocr_response) ############
name: ocr_response
path: ocr_response
max_definition_level: 1
max_repetition_level: 0
physical_type: BYTE_ARRAY
logical_type: String
converted_type (legacy): UTF8
compression: SNAPPY (space_saved: 82%)
Run Code Online (Sandbox Code Playgroud)