Apache spark 减去两个数组以在Pyspark中获得一个新数组
我是新手。 我可以用python Pandas&Numpy对数组进行求和、减法或乘法。但是我在Spark python中做类似的事情时遇到了困难。我在数据库里 例如,这种方法会产生一个巨大的错误消息,我不想复制粘贴到这里: 微分器=udflambda x,y:x-y,ArrayTypeFloatType df.带列'difference',差分词'Array1','Array2' 架构如下所示:Apache spark 减去两个数组以在Pyspark中获得一个新数组,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我是新手。 我可以用python Pandas&Numpy对数组进行求和、减法或乘法。但是我在Spark python中做类似的事情时遇到了困难。我在数据库里 例如,这种方法会产生一个巨大的错误消息,我不想复制粘贴到这里: 微分器=udflambda x,y:x-y,ArrayTypeFloatType df.带列'difference',差分词'Array1','Array2' 架构如下所示: root |-- col1: integer (nullable = true) |-- tim
root
|-- col1: integer (nullable = true)
|-- time: timestamp (nullable = true)
|-- num: integer (nullable = true)
|-- part: integer (nullable = true)
|-- result: integer (nullable = true)
|-- Array1: array (nullable = true)
| |-- element: float (containsNull = true)
|-- Array2: array (nullable = false)
| |-- element: float (containsNull = true)
我只想创建一个新列减去这两个数组列。实际上,我会得到他们之间的RMSE。但我想,一旦我学会了如何获得这种差异,我就能处理好它
数组看起来像这样我只是输入了一些整数:
第1排[5,4,2,4,3]
阵列2_第1行[4,3,1,2,1]
因此,第1行的结果数组应为:
DiffCol_row1[1,1,1,2,2]
谢谢你的建议或指导。谢谢。您可以压缩和转换数组
从pyspark.sql.functions导入expr
df=spark.createDataFrame
[5,4,2,4,3]、[4,3,1,2,1]、数组1,数组2
df.withColumn
阵列3,
exprtTransformarray_ziparray1,array2,x->x.array1-x.array2
显示
+--------+--------+--------+
|阵列1 |阵列2 |阵列3|
+--------+--------+--------+
|[5, 4, 2, 4, 3]|[4, 3, 1, 2, 1]|[1, 1, 1, 2, 2]|
+--------+--------+--------+
一个有效的udf需要一个等价的逻辑,即
从pyspark.sql.functions导入udf
@乌德法拉
def差速器XS、ys:
如果xs和ys:
返回[floatx-y表示x,y表示zipxs,ys]
df.withColumnarray3,differenticerarray1,array2.show
+--------+--------+----------+
|阵列1 |阵列2 |阵列3|
+--------+--------+----------+
|[5, 4, 2, 4, 3]|[4, 3, 1, 2, 1]|[1.0, 1.0, 1.0, 2...|
+--------+--------+----------+
您可以压缩和转换数组
从pyspark.sql.functions导入expr
df=spark.createDataFrame
[5,4,2,4,3]、[4,3,1,2,1]、数组1,数组2
df.withColumn
阵列3,
exprtTransformarray_ziparray1,array2,x->x.array1-x.array2
显示
+--------+--------+--------+
|阵列1 |阵列2 |阵列3|
+--------+--------+--------+
|[5, 4, 2, 4, 3]|[4, 3, 1, 2, 1]|[1, 1, 1, 2, 2]|
+--------+--------+--------+
一个有效的udf需要一个等价的逻辑,即
从pyspark.sql.functions导入udf
@乌德法拉
def差速器XS、ys:
如果xs和ys:
返回[floatx-y表示x,y表示zipxs,ys]
df.withColumnarray3,differenticerarray1,array2.show
+--------+--------+----------+
|阵列1 |阵列2 |阵列3|
+--------+--------+----------+
|[5, 4, 2, 4, 3]|[4, 3, 1, 2, 1]|[1.0, 1.0, 1.0, 2...|
+--------+--------+----------+
您可以将zip_与Spark 2.4一起使用:
从pyspark.sql.functions导入expr
df=spark.createDataFrame
[5,4,2,4,3]、[4,3,1,2,1]、数组1,数组2
df.withColumn
阵列3,
使用阵列1、阵列2、x、y->x-y表示ZIP_
显示
+--------+--------+--------+
|阵列1 |阵列2 |阵列3|
+--------+--------+--------+
|[5, 4, 2, 4, 3]|[4, 3, 1, 2, 1]|[1, 1, 1, 2, 2]|
+--------+--------+--------+
您可以将zip_与Spark 2.4一起使用:
从pyspark.sql.functions导入expr
df=spark.createDataFrame
[5,4,2,4,3]、[4,3,1,2,1]、数组1,数组2
df.withColumn
阵列3,
使用阵列1、阵列2、x、y->x-y表示ZIP_
显示
+--------+--------+--------+
|阵列1 |阵列2 |阵列3|
+--------+--------+--------+
|[5, 4, 2, 4, 3]|[4, 3, 1, 2, 1]|[1, 1, 1, 2, 2]|
+--------+--------+--------+
谢谢@user11406020的回复。arrays\u-zip很好!我开始阅读pyspark.sql.functions,它非常有用。非常感谢。你为什么否决了这个问题?这是一个糟糕的解释还是一个糟糕的问题?@user11406020@udfarray的目的是什么?谢谢@user11406020的回复。arrays\u-zip很好!我开始了reading pyspark.sql.functions,它非常有用。非常感谢。你为什么否决这个问题?这是一个糟糕的解释还是一个糟糕的问题?@user11406020@udfarray的目的是什么?