我有一些包含JSON对象的文本文件(每行一个对象)。示例:根据某个键值(pyspark)从RDD创建多个Spark DataFrame
{"a": 1, "b": 2, "table": "foo"}
{"c": 3, "d": 4, "table": "bar"}
{"a": 5, "b": 6, "table": "foo"}
...
我想根据表名称将文本文件的内容解析到Spark DataFrame中。所以在上面的例子中,我将有一个“foo”的DataFrame和“bar”的另一个DataFrame。我已尽可能JSON的线分组为一个RDD的内部列出与以下(pyspark)代码:
text_rdd = sc.textFile(os.path.join("/path/to/data", "*"))
tables_rdd = text_rdd.groupBy(lambda x: json.loads(x)['table'])
这产生含有元组的列表与以下结构的RDD:
RDD[("foo", ['{"a": 1, "b": 2, "table": "foo"}', ...],
("bar", ['{"c": 3, "d": 4, "table": "bar"}', ...]]
如何将此RDD分解为每个表键的DataFrame?
编辑:我试图澄清上面有一个单一的文件中包含多个表中的信息行。我知道我可以在我创建的“groupBy”RDD上调用.collectAsMap,但我知道这会在我的驱动程序上占用相当数量的RAM。我的问题是:有没有办法在不使用.collectAsMap的情况下将“groupBy”RDD分成多个DataFrame?