我遇到了以下问题。我在特定存储桶中存储了大约30,000个JSON文件。这些文件非常小;每个只需要400-500 Kb,但数量不是很少。
我想基于所有这些文件创建DataFrame。我正在使用通配符读取JSON文件,如下所示:
var df = sqlContext.read.json("s3n://path_to_bucket/*.json")
我也尝试过这种方法,因为json(...)
已被弃用:
var df = sqlContext.read.format("json").load("s3n://path_to_bucket/*.json")
问题是创建df
需要很长时间。我等了4个小时,Spark工作仍在运行。
是否有更有效的方法来收集所有这些JSON文件并基于它们创建DataFrame?
更新
或者至少可以读取最后1000个文件而不是读取所有文件?我发现可以通过以下sqlContext.read.format("json").options
选项,但我无法弄清楚如何只读取N个最新文件。
答案 0 :(得分:1)
如果你可以将最后1000个修改过的文件名放到一个简单的列表中,你可以简单地调用:
sqlContext.read.format("json").json(filePathsList: _*)
请注意,.option
调用通常用于配置架构选项。
不幸的是,我之前没有使用过S3,但我认为你可以在这个问题的答案中使用相同的逻辑来获取最后修改的文件名: How do I find the last modified file in a directory in Java?
答案 1 :(得分:0)
您正在加载13Gb的信息。你确定创建DF需要很长时间吗?也许它正在运行应用程序的其余部分,但UI显示了。
尝试加载并打印DF的第一行。
无论如何,群集的配置是什么?