你能在pyspark中找到一列数据帧吗?

时间:2016-11-17 02:23:22

标签: nested pyspark spark-dataframe pyspark-sql

我对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数据帧。我没有确切的错误。

我正在尝试做什么?

1 个答案:

答案 0 :(得分:0)

Spark不支持嵌套数据帧。为什么要将包含整个CSV的列始终存储在内存中?在我看来,如果你需要,你没有成功地将数据提取到其他列。