创建另一列数组中两个相邻数字之间的差异数组列 python/pyspark
Create column of array of differences between two adjacent numbers in another column's array python/pyspark
我有一列由数字组成的数组,即 [0,80,160,220],我想创建一列包含相邻项之间差异的数组,即 [80,80,60]
有人知道如何在 Python/PySpark 中执行此操作吗?我的代码是 df=df.withcolumn('col_array_diffs', [df.col_array.getItem[i]-df.col_array.getItem[i-1] if i else None for i in range(1,F.size(df.col_array))])
,但我真的很难处理数组类型。这会产生 AssertionError: col should be Column...谢谢!
您可以使用 UDF 来执行此操作。
import pyspark.sql.types as T
def subtract_el(x):
return [abs(i-j) for i, j in list(zip(x, x[1:]))]
df = spark.createDataFrame(pd.DataFrame([[[0,80,160,220]]]))
df.select(F.udf(subtract_el, T.ArrayType(T.IntegerType()))("0").alias("diff")).show()
结果:
+------------+
| diff|
+------------+
|[80, 80, 60]|
+------------+
我有一列由数字组成的数组,即 [0,80,160,220],我想创建一列包含相邻项之间差异的数组,即 [80,80,60]
有人知道如何在 Python/PySpark 中执行此操作吗?我的代码是 df=df.withcolumn('col_array_diffs', [df.col_array.getItem[i]-df.col_array.getItem[i-1] if i else None for i in range(1,F.size(df.col_array))])
,但我真的很难处理数组类型。这会产生 AssertionError: col should be Column...谢谢!
您可以使用 UDF 来执行此操作。
import pyspark.sql.types as T
def subtract_el(x):
return [abs(i-j) for i, j in list(zip(x, x[1:]))]
df = spark.createDataFrame(pd.DataFrame([[[0,80,160,220]]]))
df.select(F.udf(subtract_el, T.ArrayType(T.IntegerType()))("0").alias("diff")).show()
结果:
+------------+
| diff|
+------------+
|[80, 80, 60]|
+------------+