【发布时间】:2019-09-23 20:20:54
【问题描述】:
我想从一个文件夹中读取多个 parquet 文件,该文件夹还包含一些其他文件类型(csv、avro)到一个数据框中。我只想阅读它的镶木地板并跳过并转到下一个(如果有的话)。 问题是镶木地板文件可能没有扩展名,并且编解码器也可能因文件而异。在 Spark-scala 中有没有办法做到这一点?
【问题讨论】:
-
到目前为止你做了什么?您是否尝试过 spark.read.parquet(文件路径)?它做了什么?请参阅stackoverflow.com/help/how-to-ask 和stackoverflow.com/help/mcve
-
即使你使用
spark.read.parquet(path),在遇到任何其他文件类型时也会给你一个异常。最好的方法是尝试修改流程以确保每个文件都有扩展名,并遍历文件并使用filter仅读取镶木地板文件。如果您不能这样做,请执行相同的操作,遍历文件并使用 try-catch 跳过那些给出异常的文件,就像我对这个问题的回答一样:stackoverflow.com/a/51042091/3000244 -
不确定你到底在找什么,但你可以试试这个
spark.read.parquet("/foldername/*/*/*.parquet")这里* and *如果你有两个以上的嵌套文件夹替换为嵌套文件夹然后添加另一个*像这样@987654329 @ -
在我的情况下无法提供扩展名,即使在处理异常程序在尝试读取镶木地板文件时遇到任何其他类型时失败 java.io.IOException: 无法读取文件的页脚:
-
所以在这种情况下,您应该迭代所有路径检查那些以 (.endsWith("parquet")) parquet 结尾的文件,并将这些路径添加到一个列表/数组/集合中,然后使用火花读取。例如。如果列表路径具有镶木地板文件的所有路径,则使用此代码
val path=List("path1","path2",....,"pathn"); spark.read.parquet(path:_*)
标签: scala apache-spark