如何取消数据集堆叠(使用数据透视)?

伯恩哈德

我在更大的堆叠数据集上尝试了1.6的新“数据透视”功能它有5,656,458行,IndicatorCode列有1344个不同的代码。

想法是使用数据透视来“拆栈”(以熊猫为单位)该数据集,并为每个IndicatorCode设置一列。

schema = StructType([ \
   StructField("CountryName", StringType(), True), \
   StructField("CountryCode", StringType(), True), \
   StructField("IndicatorName", StringType(), True), \
   StructField("IndicatorCode", StringType(), True), \
   StructField("Year", IntegerType(), True), \
   StructField("Value", DoubleType(), True)  \
])

data = sqlContext.read.load('hdfs://localhost:9000/tmp/world-development-indicators/Indicators.csv', 
                            format='com.databricks.spark.csv', 
                            header='true', 
                            schema=schema)

data2 = indicators_csv.withColumn("IndicatorCode2", regexp_replace("indicatorCode", "\.", "_"))\
                      .select(["CountryCode", "IndicatorCode2", "Year", "Value"])

columns = [row.IndicatorCode2 for row in data2.select("IndicatorCode2").distinct().collect()]

data3 = data2.groupBy(["Year", "CountryCode"])\
             .pivot("IndicatorCode2", columns)\
             .max("Value")

尽管此操作成功返回,但data3.first()从未返回结果(10分钟后,我使用3个内核在独立服务器上中断了此操作)。

我的方法使用得很好,RDD并且aggregateByKey效果很好,所以我不是在寻找解决方案,而是使用DataFrames枢轴也可以解决问题。

零323

好吧,通常来说,数据透视不是一个非常有效的操作,并且使用DataFrameAPI可以做的事情很少您可以尝试的一件事是repartition数据:

(data2
  .repartition("Year", "CountryCode")
  .groupBy("Year", "CountryCode")
  .pivot("IndicatorCode2", columns)
  .max("Value"))

甚至合计:

from pyspark.sql.functions import max

(df
    .groupBy("Year", "CountryCode", "IndicatorCode")
    .agg(max("Value").alias("Value"))
    .groupBy("Year", "CountryCode")
    .pivot("IndicatorCode", columns)
    .max("Value"))

申请前pivot两种解决方案背后的想法是相同的。而不是移动大扩展,而是Rows移动狭窄的密集数据并在本地扩展。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用多维的交叉表/数据透视

来自分类Dev

如何使用BigQuery模拟数据透视表?

来自分类Dev

熊猫数据框堆叠与透视

来自分类Dev

在SQL Server中取消数据透视表

来自分类Dev

取消透视表数据

来自分类Dev

取消透视熊猫数据框的最佳方法

来自分类Dev

通过合并取消对Pandas数据集的透视

来自分类Dev

使用Python Pandas取消透视/堆叠透视表

来自分类Dev

如何使用SpreadsheetLight创建数据透视表?

来自分类Dev

标记堆叠的数据集

来自分类Dev

取消透视数据时如何保留索引(SQL Server)

来自分类Dev

使用文本数据取消对熊猫数据框的透视

来自分类Dev

使用MS Access查询取消数据透视或转换数据

来自分类Dev

由于类型冲突,取消透视数据失败

来自分类Dev

如何使用Informatica透视行数据?

来自分类Dev

取消透视表数据

来自分类Dev

多维数据集列上的数据透视表/取消数据透视表

来自分类Dev

取消透视数据框

来自分类Dev

如何使用使用数据透视表

来自分类Dev

如何取消处理和完全处理SSAS多维数据集

来自分类Dev

熊猫取消数据堆叠并写入CSV

来自分类Dev

如何使用数据集的列

来自分类Dev

标记堆叠的数据集

来自分类Dev

使用数据透视功能合并Oracle中的列集

来自分类Dev

用于取消堆叠数据的 Excel 宏

来自分类Dev

如何从 SQL 透视数据

来自分类Dev

在 Python 中透视/取消堆叠 Pandas 数据帧

来自分类Dev

JFreechart 中的多个堆叠区域数据集

来自分类Dev

取消堆叠多索引数据帧