【发布时间】:2017-09-04 19:48:43
【问题描述】:
我有 15k 个小文件。处理后,每个文件生成三个Data frames对象:v、vT和e。我想将所有 15k 文件的所有这三个数据帧存储到一个数据帧对象(我们称之为组合)并写入磁盘,以便下次我只读取一次而不是 15k 次。此外,我还可以将此组合转换为 RDD,并一次将 map 函数应用于 15k 条记录。这将充分利用 CPU。
但目前我的实现是将 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、vertex 和 edge 是从每个文件中提取的三个列表对象。
将 15k 文件中的所有 v、vT 和 e 存储到单个列表组合中
combo = [[v1, vT2, e3],...,[vN, vTN, eN]] (pseudo-code)
我想使用组合创建一个数据框(combo_df)
combo_df = sqlContext.createDataFrame(combo, ['v', 'vT', 'e'])
此时出现错误:
AssertionError: dataType 应该是 DataType
我不知道如何解决这个问题。
【问题讨论】:
标签: python apache-spark dataframe pyspark