從這種 rdd/spark 資料幀中最簡單的程序是什么:
| 日期 | 東京 | 紐約 |
|---|---|---|
| 01/01 | 1 | 2 |
| 02/01 | 3 | 2 |
| 03/01 | 4 | 5 |
以下表格中的相同資料?
| 城市 | 日期 | 價值 |
|---|---|---|
| 東京 | 01/01 | 1 |
| 紐約 | 01/01 | 2 |
| 東京 | 02/01 | 3 |
| 紐約 | 02/01 | 2 |
| 東京 | 03/01 | 4 |
| 紐約 | 03/01 | 5 |
uj5u.com熱心網友回復:
pyspark sql我會使用像create_map和這樣的函式來解決這個問題explode
如下 -
from pyspark.sql import functions as func
df1= df.withColumn('mapCol',
func.create_map(func.lit('Tokyo'),df.Tokyo,
func.lit('New York'),df["New York"]
)
)
res = df1.select('*',func.explode(df1.mapCol).alias('city','value')).drop("Tokyo", "New York", "mapCol")
res.show()
輸出 :
----- -------- -----
| date| city|value|
----- -------- -----
|01/01| Tokyo| 1|
|01/01|New York| 2|
|02/01| Tokyo| 3|
|02/01|New York| 2|
|03/01| Tokyo| 4|
|03/01|New York| 5|
----- -------- -----
uj5u.com熱心網友回復:
有一個更簡單的解決方案,使用堆疊
apache-spark-sql
with t (date, Tokyo, `New York`) as (select stack(3 ,'01/01',1,2 ,'02/01',3,2 ,'03/01',4,5))
-- The solution starts here
select date, stack(2, 'Tokyo',Tokyo,'New York',`New York`) as (city,value)
from t
| 日期 | 城市 | 價值 |
|---|---|---|
| 01/01 | 東京 | 1 |
| 01/01 | 紐約 | 2 |
| 02/01 | 東京 | 3 |
| 02/01 | 紐約 | 2 |
| 03/01 | 東京 | 4 |
| 03/01 | 紐約 | 5 |
pyspark
df = spark.sql("select stack(3 ,'01/01',1,2 ,'02/01',3,2 ,'03/01',4,5) as (date, Tokyo, `New York`)")
#The solution starts here
df.selectExpr("date", "stack(2, 'Tokyo',Tokyo,'New York',`New York`) as (city,value)").show()
----- -------- -----
| date| city|value|
----- -------- -----
|01/01| Tokyo| 1|
|01/01|New York| 2|
|02/01| Tokyo| 3|
|02/01|New York| 2|
|03/01| Tokyo| 4|
|03/01|New York| 5|
----- -------- -----
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441153.html
標籤:阿帕奇火花 pyspark apache-spark-sql rdd
