我对pyspark / bigdata有点新意,所以这可能是一个坏主意,但我有大约一百万个单独的CSV文件,每个文件都与一些元数据相关联。我想要一个包含所有元数据字段列的pyspark数据框,但也有一个列,其条目是与每组元数据相关联的(整个)CSV文件。
我现在不在工作,但我记得几乎确切的代码。我尝试了类似
的玩具示例outer_pandas_df = pd.DataFrame.from_dict({"A":[1,2,3],"B":[4,5,6]})
## A B
## 0 1 4
## 1 2 5
## 2 3 6
然后如果你这样做
outer_schema = StructType([
StructField("A", IntegerType(), True),
StructField("B", IntegerType(), True)
])
outer_spark_df = sqlctx.createDataFrame(outer_pandas_df, schema=outer_schema)
然后结果是预期的火花数据帧。但现在如果你做了
inner_pandas_df = pd.DataFrame.from_dict({"W":["X","Y","Z"]})
outer_pandas_df["C"] = [inner_pandas_df, inner_pandas_df, inner_pandas_df]
制作类似
的架构inner_schema = StructType([
StructField("W", StringType(), True)
])
outer_schema = StructType([
StructField("A", IntegerType(), True),
StructField("B", IntegerType(), True),
StructField("W", ArrayType(inner_schema), True)
])
然后失败了:
sqlctx.createDataFrame(outer_pandas_df, schema=outer_schema)
与ArrayType相关的错误不接受pandas数据帧。我没有确切的错误。
我正在尝试做什么?
答案 0 :(得分:0)
Spark不支持嵌套数据帧。为什么要将包含整个CSV的列始终存储在内存中?在我看来,如果你需要,你没有成功地将数据提取到其他列。