我有一些包含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?