我在 spark 資料框中有一列串列。
----- ----------
|c1 | c2 |
----- ----------
|a |[1, 0, 1, 1] |
|b |[0, 1, 1, 0] |
|c |[1, 1, 0, 0] |
----- ----------
如何將其轉換為另一個 spark 資料框,其中每個串列都轉換為資料框列?此外,“c1”列中的每個條目都是創建的新列的名稱。像下面的東西。
--------
|a| b | c|
--------
|1 |0| 1 |
|0 |0| 1 |
|1 |1| 0 |
|1 |0| 0 |
--------
注意:我確實考慮過這樣做:將串列的列轉換為資料框,然后對結果矩陣進行轉置。但是,這會創建很多列[因為我擁有的串列資料的大小非常大],因此不是一個有效的解決方案。
歡迎任何幫助。
uj5u.com熱心網友回復:
import pyspark.sql.functions as F
#Not a part of the solution, only used to generate the data sample
df = spark.sql("select stack(3 ,'a',array(1, 0, 1, 1), 'b',array(0, 1, 1, 0) ,'c',array(1, 1, 0, 0)) as (c1,c2)")
df.groupBy().pivot('c1').agg(F.first('c2')).selectExpr('inline(arrays_zip(*))').show()
--- --- ---
| a| b| c|
--- --- ---
| 1| 0| 1|
| 0| 1| 1|
| 1| 1| 0|
| 1| 0| 0|
--- --- ---
這可以很容易地針對大型資料集進行測驗
df = sql("select id as c1, transform(sequence(1,10000), e -> tinyint(round(rand()))) as c2 from range(10000)")
剛剛在具有 4 核和 32 GB RAM (Azure Databricks) 的 VM 上成功執行了 10K 陣列,每個 10K 元素。
耗時 5.35 分鐘。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/441264.html
標籤:数据框 pyspark apache-spark-sql
上一篇:在資料幀R中拆分值
下一篇:如何使第一個索引列為空?
