【问题标题】:How to load several days data from a folder containing huge amount of data on HDFS?如何从 HDFS 上包含大量数据的文件夹中加载几天的数据?
【发布时间】:2020-11-19 15:36:31
【问题描述】:

假设在 hdfs 上我有一个文件夹 /usr/data/,其中包含许多按日期组织的日期数据,例如 /usr/data/date=xxxx。我想在 zeppelin notebook 中加载一周的数据,所以我所做的是

val data = spark.read.parque("/usr/data/").filter("DATE>='2020-06-05' && 'DATE<=2020-06-12'")

但是,由于/usr/data/的整个数据量太大,无法加载,有没有什么方法可以只加载一周的数据,而不是先加载整个文件夹?谢谢

【问题讨论】:

  • 过滤条件打印错误 - 引号位于 && 之后,必须在 = 之后。

标签: apache-spark hdfs parquet


【解决方案1】:

Spark 优化器会处理它并且不会加载整个文件夹。

  • 由于您的数据在 date 列上分区,因此 spark 不会从 /usr/data 加载所有数据,而只会加载属于您的过滤查询的匹配目录。

  • 您可以检查执行计划以查看使用 .explain() 加载的目录(在 PartitionFilters 部分中)。

Example:

val data = spark.read.parquet("/usr/data/").filter(col("date">="2020-06-05" &&col("date") <= "2020-06-12")
data.explain()

【讨论】:

  • 感谢您的回答,希望火花优化器可以正常工作。只是如果我将一周的数据复制到一个单独的文件夹中,我就可以加载它们。如果我在整个文件夹上使用过滤器,加载总是失败。我正在使用 spark 2.1.1,对此有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多