我有15k个小文件。处理之后,每个文件生成三个数据帧对象:v,vT和e。我想将所有15k文件的所有这三个数据帧存储到一个数据框对象中(我们称之为组合)并写入磁盘,以便下一次只读取一次而不是15k次。此外,我还可以将此组合转换为RDD,并将地图功能一次应用于15k条记录。这将充分利用CPU。我可以创建一个以数据框为元素的数据框吗? (Pyspark使用sqlContext)
但是目前我的实现是将v,vT和e写入一个文件夹(每个文件夹每个文件夹,总共15k个文件夹)。在每个文件夹中,v,vT和e分别有三个文件夹。现在我必须读取所有文件的每个15k次(技术上我需要读取15k * 3 = 45k次)。当我在这些文件上应用某些算法时,我只需使用for循环来逐一应用算法。不是很聪明我知道
所以我想出了一个想法,即将15k文件的v,vT和e存储到名为combo的列表中,然后创建一个单一数据框combo_df。通过将combo_df转换为RDD,我可以使用map函数在所有15k上一次应用用户定义的函数。
的代码如下,对于每个文件:
v = sqlContext.createDataFrame(uri,
['id', 'URI', 'flag'])
vT = sqlContext.createDataFrame(vertex,
['id', 'URI_ID_FK', 'Vertex_Type_URI_ID_FK'])
e = sqlContext.createDataFrame(edge,
['src', 'dst', 'Relation_Type_URI_ID_FK'])
URI,顶点和边缘是三个列表对象从每个文件提取。
商店所有的V,VT和15K文件电子为使用组合
combo_df = sqlContext.createDataFrame(combo, ['v', 'vT', 'e'])
此时一个列表组合
combo = [[v1, vT2, e3],...,[vN, vTN, eN]] (pseudo-code)
我想创建一个数据帧(combo_df)我得到一个错误:
AssertionError: dataType should be DataType
我不知道如何解决这个问题。
我有15K的文件。在这种情况下,我将不得不创建45k文件。这个文件非常小,像100kb到300kb。所以我需要找到一种方法将所有它们合并成一个数据框,意思是给我15k文件,我给你一个数据帧。 –