簡體   English   中英

在 spark-sql/pyspark 中取消旋轉

[英]Unpivot in spark-sql/pyspark

我手頭有一個問題陳述,其中我想在 spark-sql/pyspark 中取消透視表。 我已經閱讀了文檔,我可以看到目前僅支持樞軸,但不支持非樞軸。 有沒有辦法實現這一目標?

讓我的初始表看起來像這樣:

讓我的初始表看起來像這樣

當我使用下面提到的命令在 pyspark 中旋轉它時:

df.groupBy("A").pivot("B").sum("C")

我得到這個作為輸出:

數據透視表后看起來像這樣

現在我想取消旋轉透視表。 通常,此操作可能會/可能不會根據我旋轉原始表的方式生成原始表。

到目前為止,Spark-sql 不提供對 unpivot 的開箱即用支持。 有沒有辦法實現這一目標?

您可以使用內置的堆棧函數,例如在 Scala 中:

scala> val df = Seq(("G",Some(4),2,None),("H",None,4,Some(5))).toDF("A","X","Y", "Z")
df: org.apache.spark.sql.DataFrame = [A: string, X: int ... 2 more fields]

scala> df.show
+---+----+---+----+
|  A|   X|  Y|   Z|
+---+----+---+----+
|  G|   4|  2|null|
|  H|null|  4|   5|
+---+----+---+----+


scala> df.select($"A", expr("stack(3, 'X', X, 'Y', Y, 'Z', Z) as (B, C)")).where("C is not null").show
+---+---+---+
|  A|  B|  C|
+---+---+---+
|  G|  X|  4|
|  G|  Y|  2|
|  H|  Y|  4|
|  H|  Z|  5|
+---+---+---+

或者在 pyspark 中:

In [1]: df = spark.createDataFrame([("G",4,2,None),("H",None,4,5)],list("AXYZ"))

In [2]: df.show()
+---+----+---+----+
|  A|   X|  Y|   Z|
+---+----+---+----+
|  G|   4|  2|null|
|  H|null|  4|   5|
+---+----+---+----+

In [3]: df.selectExpr("A", "stack(3, 'X', X, 'Y', Y, 'Z', Z) as (B, C)").where("C is not null").show()
+---+---+---+
|  A|  B|  C|
+---+---+---+
|  G|  X|  4|
|  G|  Y|  2|
|  H|  Y|  4|
|  H|  Z|  5|
+---+---+---+

我手頭有一個問題說明,其中我想取消表spark-sql / pyspark中的表。 我已經閱讀了文檔,並且可以看到到目前為止僅支持數據透視,但不支持取消數據透視。 有沒有辦法可以做到這一點?

讓我的初始表如下所示:

讓我的初始表格如下所示

當我使用下面提到的命令在pyspark中旋轉它時:

df.groupBy("A").pivot("B").sum("C")

我得到這個作為輸出:

樞紐分析表看起來像這樣之后

現在,我想取消透視表。 通常,此操作可能會/可能不會基於我對原始表的透視方式產生原始表。

截至目前,Spark-sql尚未提供對unpivot的開箱即用支持。 有沒有辦法可以做到這一點?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM