你可以有一个列的数据框架在pyspark



我对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的列始终存储在内存中呢?在我看来,如果您需要这样做,您就不能成功地将数据提取到其他列中。

相关内容

  • 没有找到相关文章