我对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)
结果是一个预期的spark数据框架。但是现在如果你做
inner_pandas_df = pd.DataFrame.from_dict({"W":["X","Y","Z"]})
outer_pandas_df["C"] = [inner_pandas_df, inner_pandas_df, inner_pandas_df]
让schema变成
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数据帧相关的错误。我没有准确的错误。
我想做的是可能的吗?
Spark不支持嵌套数据框架。为什么要将包含整个CSV的列始终存储在内存中呢?在我看来,如果您需要这样做,您就不能成功地将数据提取到其他列中。