场景:我有85789142个JSON文档和一个包含32227957个项目的文本文件。
文本文件如下所示:
url1
url2
url3
示例JSON文档:
{"key1":"value1","key2":"value2","url":"some_url"}
我想找到与文本文件中的项目对应的JSON文档。
我做了什么:
import json
textfile_rdd = sc.textFile("path/to/textfile.txt")
urls = set(textfile_rdd.collect())
json_files_rdd = sc.textFile("path/to/the/directory/of/json/files")
json_rdd = json_files_rdd.filter(lambda x: (json.loads(x)).get("url") in urls )
此代码适用于小尺寸的文本文件(我尝试过500000个文档)。
目前我正在将我的32227957文本文件拆分成更小的文件,有没有更好的方法?
答案 0 :(得分:0)
我建议你使用sparkSQL解析你的json文件,并将文本文件加载为一列的DataFrame。然后你可以简单地加入这两个数据集,而不需要将第一个文件收集到驱动程序,这就是你现在的可扩展性问题......