【发布时间】:2020-10-22 07:41:52
【问题描述】:
我一直在尝试列出除元数据目录之外的其他目录中 Parquet 文件中的所有 Spark 数据帧。 目录结构如下:
dumped_data/
- time=19424145
- time=19424146
- time=19424147
- _spark_metadata
主要目标是避免从 _spark_metadata 目录读取数据。我创建了一个解决方案,但由于某种原因它不断返回空值。可能是什么原因?
解决办法如下:
val dirNamesRegex: Regex = s"\\_spark\\_metadata*".r
def transformDf: Option[DataFrame] = {
val filesDf = listPath(new Path(feedPath))(fsConfig)
.map(_.getName)
.filter(name => !dirNamesRegex.pattern.matcher(name).matches)
.flatMap(path => sparkSession.parquet(Some(feedSchema))(path))
if (!filesDf.isEmpty)
Some(filesDf.reduce(_ union _))
else None
}
listPath - 在 hdfs 中列出数据文件的自定义方法。 feedSchema 是 StructType
没有 if on Some and None 我得到这个异常:
java.lang.UnsupportedOperationException: empty.reduceLeft
at scala.collection.LinearSeqOptimized$class.reduceLeft(LinearSeqOptimized.scala:137)
at scala.collection.immutable.List.reduceLeft(List.scala:84)
at scala.collection.TraversableOnce$class.reduce(TraversableOnce.scala:208)
at scala.collection.AbstractTraversable.reduce(Traversable.scala:104)
【问题讨论】:
标签: regex scala apache-spark parquet