【问题标题】:Filter spark paths on `input_file_name`过滤`input_file_name`上的火花路径
【发布时间】:2017-06-15 22:10:33
【问题描述】:

是否有一种有效的方法可以根据input_file_name 将输入文件过滤到 spark 数据帧中,而无需读取所有文件的内容?

我在 S3 上有一条路径,其中包含许多大型压缩 csv (xx.csv.gz),我正在通过 spark.read.csv("path/to/csvs/*") 读取它们。我想根据文件名过滤输入而不使用 glob 模式。

但是,当我使用 withColumn("file_name", input_file_name()) 将输入文件名添加到 Dataframe 并使用 where 对其进行过滤时,我看到所有文件都得到处理和读取。

有没有更有效的方法来做到这一点,而无需处理每个文件?

谢谢!

【问题讨论】:

标签: scala apache-spark


【解决方案1】:

glob 模式正在为您进行过滤。它不是针对对象存储的最有效的代码位,但它正在匹配。

您遇到了一些 S3 性能/限制问题吗?

【讨论】:

  • 感谢您的回复!遗憾的是,glob 模式对于我想做的过滤来说不够强大(比如一些字符串提取和计算)。这就是为什么我问“没有全局模式”。使用input_file_name 最终会读取整个文件,即使其数据被过滤掉。理想情况下,spark 会将过滤器向下推,只读取文件名,跳过文件内容的读取。我很好奇是否有一种有效的火花方法可以直接使用文件系统进行预过滤 ala @jamborta 上面的评论。
  • 不确定。我知道对于流媒体,您可以定义自己的输入源(可以进行任何您想要的过滤),也许您可​​以为批量查询做一些事情。
猜你喜欢
  • 2015-05-24
  • 2020-10-28
  • 2018-12-17
  • 2018-03-07
  • 1970-01-01
  • 2020-08-09
  • 2016-05-01
  • 2015-07-10
  • 1970-01-01
相关资源
最近更新 更多