因此,我使用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命令都在运行。
>>> 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|
+-----+----------+-----+