如何在Azure Databricks(Pyspark)中使用SQL查询取消旋转数据框

问题描述 投票:1回答:1

因此,我使用registerTempTable()从pyspark数据帧创建了一个临时表。该表具有如下数据:

________________________________________________|姓名|杂货|小配件|租金|| ------------------------------------------------ ||约翰| 10 | 15 | 20 ||亨利| 12 | 35 | 18 ||马克| 15 | 5 | 10 |--------------------------------------------------

我想取消显示杂货,小工具和房租这三列,并获得如下表:

-------------------------------------------|姓名| Spend_Type |支出|-------------------------------------------|约翰|杂货| 10 ||约翰|小配件| 15 ||约翰|租金| 20 ||亨利|杂货| 12 ||亨利|小配件| 35 ||亨利|租金| 18 ||马克|杂货| 15 ||马克|小配件| 5 ||马克|租金| 10 |------------------------------------------

我将pyspark代码写为

//导入所有必要的库query ='''从mytable UNPIVOT中选择*(在(“ Groceries”,“ Gadgets”,“ Rent”)中为FOR Spend_Type花费)'''df_view1 = sqlContext.sql(查询)

但是狡猾的人给了我一个错误

org.apache.spark.sql.catalyst.parser.ParseException:。。。ParseException:'\ nmismatched输入\'from \'期望EOF。。

有人可以告诉我我在做什么错吗?请注意,“从mytable中选择*”甚至是Pivot命令都在运行。

sql pyspark pyspark-sql databricks pyspark-dataframes
1个回答
0
投票
>>> from pyspark.sql.functions import *
>>> df.show()
+-----+---------+-------+----+
| Name|Groceries|Gadgets|Rent|
+-----+---------+-------+----+
| John|       10|     15|  20|
|Henry|       12|     35|  18|
| Mark|       15|      5|  10|
+-----+---------+-------+----+

>>> df.withColumn("temp", explode(split(regexp_replace(to_json(struct(col("Groceries"),col("Gadgets"),col("Rent"))), """[\{"\}]""", ""), ",")))
      .withColumn("Spend_Type", split(col("temp"), ":")[0])
      .withColumn("Spend", split(col("temp"), ":")[1]).select(col("Name"), col("Spend_Type"), col("Spend")).show()
+-----+----------+-----+
| Name|Spend_Type|Spend|
+-----+----------+-----+
| John| Groceries|   10|
| John|   Gadgets|   15|
| John|      Rent|   20|
|Henry| Groceries|   12|
|Henry|   Gadgets|   35|
|Henry|      Rent|   18|
| Mark| Groceries|   15|
| Mark|   Gadgets|    5|
| Mark|      Rent|   10|
+-----+----------+-----+
© www.soinside.com 2019 - 2024. All rights reserved.