【发布时间】: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