如果我在 pyspark 中有一個 ArrayType 列
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame(((1,[]),(2,[1,2,3]),(3,[-2])),schema=StructType([StructField("a",IntegerType()),StructField("b",ArrayType(IntegerType()))]))
df.show()
output:
--- ---------
| a| b|
--- ---------
| 1| []|
| 2|[1, 2, 3]|
| 3| [-2]|
現在,我希望能夠與 column 的每個元素進行互動b,例如,
- 將每個元素除以 5 輸出:
--- ---------------
| a| b|
--- ---------------
| 1| []|
| 2|[0.2, 0.4, 0.6]|
| 3| [-0.4]|
--- ---------------
- 添加到每個元素等。
在將某些運算子或函式應用于陣列型別列的每個元素的情況下,如何進行此類轉換?
uj5u.com熱心網友回復:
您正在尋找該tranform功能。Transform 能夠對陣列的每個元素應用計算。
from pyspark.sql import functions as F
# Spark < 3.1.0
df.withColumn("b", F.expr("transform(b, x -> x / 5)")).show()
"""
--- ---------------
| a| b|
--- ---------------
| 1| []|
| 2|[0.2, 0.4, 0.6]|
| 3| [-0.4]|
--- ---------------
"""
# Spark >= 3.1.0
df.withColumn("b", F.transform("b", lambda x: x / 5)).show()
"""
--- ---------------
| a| b|
--- ---------------
| 1| []|
| 2|[0.2, 0.4, 0.6]|
| 3| [-0.4]|
--- ---------------
"""
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/416372.html
標籤:
上一篇:從結構Pyspark的陣列創建列
