首页 > 解决方案 > 如何在 Spark SQL 中对名称中带有前导零的目录使用通配符?

问题描述

在使用 spark read 函数时提到了一些奇怪的行为:

 spark.read.json(".../date=2019-08-0[1-9]")//works
 spark.read.json(".../date=2019-08-[10-20]")//throws "Path does not exist" but folders definetily exist.
 spark.read.json(".../date=2019-08-{10,11,12,13}")//works
 spark.read.json(".../date=2019-08-[01-10]")// throws java.io.IOException: Illegal file pattern: Illegal character range near index n

如何用前导零通配范围?

标签: apache-sparkapache-spark-sql

解决方案


来自Hadoop Glob 模式

  • [abc]: 匹配字符集 {a,b,c} 中的单个字符
  • [a-b]: 匹配字符范围 {a…b} 中的单个字符
  • {ab,cd}: 匹配字符串集合 {ab, cd} 中的一个字符串

因此,[10-20]匹配 {1, 0~2, 0} 之一。

date=2019-08-[10-20]等于date=2019-08-{0,1,2},可能没有这样的文件。


推荐阅读