【问题标题】:How does spark reads text format filesspark如何读取文本格式文件
【发布时间】:2017-05-19 19:08:40
【问题描述】:

我在 S3 中有一个文本格式 (.gz) 的数据集,我正在使用 spark.read.csv 将文件读入 spark。

这是大约 100GB 的数据,但它包含 150 列。我只使用 5 列(所以我减少了数据的广度)并且我只选择了 5 列。

对于这种场景,spark 是扫描完整的 100GB 数据,还是仅智能过滤这 5 列而不扫描所有列(如列格式)?

对此的任何帮助将不胜感激。

imp_feed = spark.read.csv('s3://mys3-loc/input/', schema=impressionFeedSchema, sep='\t').where(col('dayserial_numeric').between(start_date_imp,max_date_imp)).select("col1","col2","col3","col4")

【问题讨论】:

  • 请添加从 S3 读取数据的代码,并选择列。
  • 你在开玩笑吗? CSV 不是 一种列格式,您必须逐个字节地按顺序解析它,以检测列/记录分隔符。此外,GZip 压缩文件必须逐位按顺序解压缩。另外,AFAIK、S3 文件不是为随机访问而设计的。
  • 是的,这就是我的恐惧所在。我们每天都加载到 S3 中,它们是文本和 GZip 格式。因此,基本上它完全处于 spark 中(此外,gzip 文件在解压缩后会增长到 5 到 6 倍)

标签: apache-spark pyspark spark-dataframe spark-csv


【解决方案1】:

将工作流程的第 1 步变成读取 CSV 文件并将其保存为快速压缩的 ORC 或 parquet 文件的过程。

然后去找创建这些文件的人并告诉他们停止它。至少,他们应该切换到 Avro + Snappy,因为这样更容易拆分初始解析和迁移到列格式。

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 2019-11-12
    • 2022-06-10
    • 2019-11-26
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多