Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySpark中数据帧的行操作_Python_Pyspark_Spark Dataframe - Fatal编程技术网

Python PySpark中数据帧的行操作

Python PySpark中数据帧的行操作,python,pyspark,spark-dataframe,Python,Pyspark,Spark Dataframe,如果您有一个DataFrame,并且希望根据行的值对函数中的数据进行一些操作 my_udf(row): threshold = 10 if row.val_x > threshold row.val_x = another_function(row.val_x) row.val_y = another_function(row.val_y) return row else: return row

如果您有一个DataFrame,并且希望根据行的值对函数中的数据进行一些操作

my_udf(row):
    threshold = 10
        if row.val_x > threshold
        row.val_x = another_function(row.val_x)
        row.val_y = another_function(row.val_y)
        return row
    else:
        return row

有人知道如何将我的udf应用于数据帧吗?

据我所知,udf参数是列名。您的示例可能会改写如下:

from pyspark.sql.functions import udf, array
from pyspark.sql.types import IntegerType

def change_val_x(val_x):
    threshold = 10
    if val_x > threshold:
        return another_function(val_x)
    else:
        return val_x

def change_val_y(arr):
    threshold = 10
    # arr[0] -> val_x, arr[0] -> val_y 
    if arr[0] > threshold:
        return another_function(arr[1])
    else:
        return val_y

change_val_x_udf = udf(change_val_x, IntegerType())
change_val_y_udf = udf(change_val_y, IntegerType())

# apply these functions to your dataframe
df = df.withColumn('val_y', change_val_y_udf(array('val_x', 'val_y')))\
       .withColumn('val_x', change_val_x_udf('val_x'))
要修改val_x列,一个简单的udf就足够了,但对于val_y,您需要val_y和val_x列的值,解决方案是使用
数组
。请注意,此代码未经测试


请参阅在多个列上应用udf。

如果可以使用pyspark函数,最好不要使用udf,如果无法将另一个函数转换为pyspark函数,则可以执行以下操作:

从pyspark.sql.types导入*
将pyspark.sql.functions作为psf导入
def另一个_功能(val):
...
另一个函数\u udf=psf.udf(另一个函数,[outputType()]))
其中,
outputType()
是与另一个函数的输出相对应的pyspark类型(
IntegerType()
StringType()
…)

def应用另一个功能(val):
返回psf.when(df.val\u x>阈值,另一个函数\u udf(val))。否则(val)
df=df.withColumn('val_y',应用另一个函数(df.val_y))\
.withColumn('val_x',应用另一个函数(df.val_x))

它是
。使用列('val_y',change_val_y_udf(array('val_x','val_y'))
不是
。使用列('val_y',change_val_x_udf(array('val_x','val_y'))
change_val_y_y_udf中使用之前,您可能已经更改了
值。