小编Yev*_*vin的帖子

使用小于100的行组大小在spark中创建镶木地板文件

我有一个具有少量字段的火花数据帧.一些字段是巨大的二进制blob.整行的大小约为50 MB.

我将数据框保存为镶木地板格式.我正在使用parquet.block.size参数控制行组的大小.

Spark会生成一个镶木地板文件,但是我总是会在一行中获得至少100行.这对我来说是一个问题,因为块大小可能会变成千兆字节,这对我的应用程序不起作用.

parquet.block.size 只要尺寸大到足以容纳超过100行,就可以正常工作.

我修改InternalParquetRecordWriter.javaMINIMUM_RECORD_COUNT_FOR_CHECK = 2,它解决了该问题,但没有配置值,我可以找到一个能够支持调整,该硬编码不变.

是否有不同/更好的方法来获得小于100的行组大小?

这是我的代码片段:

from pyspark import Row
from pyspark.sql import SparkSession
import numpy as np

from pyspark.sql.types import StructType, StructField, BinaryType


def fake_row(x):
    result = bytearray(np.random.randint(0, 127, (3 * 1024 * 1024 / 2), dtype=np.uint8).tobytes())
    return Row(result, result)

spark_session = SparkSession \
    .builder \
    .appName("bbox2d_dataset_extraction") \
    .config("spark.driver.memory", "12g") \
    .config("spark.executor.memory", "4g")

spark_session.master('local[5]')

spark = spark_session.getOrCreate()
sc = spark.sparkContext
sc._jsc.hadoopConfiguration().setInt("parquet.block.size", 8 * 1024 * 1024)

index = …
Run Code Online (Sandbox Code Playgroud)

hadoop apache-spark parquet

7
推荐指数
1
解决办法
1686
查看次数

标签 统计

apache-spark ×1

hadoop ×1

parquet ×1