使用udf将python apply函数中的等效代码应用于Pyspark代码

使用udf将python apply函数中的等效代码应用于Pyspark代码,python,string,apache-spark,pyspark,user-defined-functions,Python,String,Apache Spark,Pyspark,User Defined Functions,下面的代码是用python编写的,在这里我使用apply函数并尝试提取每行的前两个字母。我想在pyspark中复制相同的代码。其中一个函数用于应用于每一行并获得输出 df = spark.createDataFrame( [ (1, "AxtTR"), # create your data here, be consistent in the types. (2, "HdyOP"),

下面的代码是用python编写的,在这里我使用apply函数并尝试提取每行的前两个字母。我想在pyspark中复制相同的代码。其中一个函数用于应用于每一行并获得输出

df = spark.createDataFrame(
        [
            (1, "AxtTR"),  # create your data here, be consistent in the types.
            (2, "HdyOP"),
            (3, "EqoPIC"),
            (4, "OkTEic"),
        ], ["id", "label"] )# add your column names here]
df.show()
下图所示的黄色标记是预期输出


您可以使用相关的Spark SQL函数:

def get_string(lst):    
    lst = str(lst)
    lst = lst.lower
    lst=  lst[0:2]
    return(lst)
df['firt_2letter'] = df['label'].apply(get_string)
如果要使用用户定义的函数,可以将其定义为:

import pyspark.sql.functions as F

df2 = df.withColumn('first_2letter', F.lower('label')[0:2])

df2.show()
+---+------+-------------+
| id| label|first_2letter|
+---+------+-------------+
|  1| AxtTR|           ax|
|  2| HdyOP|           hd|
|  3|EqoPIC|           eq|
|  4|OkTEic|           ok|
+---+------+-------------+

谢谢,我只是想知道这是一个简单的函数。如果有自定义函数,我们如何在中调用该函数pyspark@NabiShaikh请参阅编辑的回答如果我们传递的是两列def get_string(vec):lst=vec[0];lst1=vec[1]lst=str(lst)lst=lst.lower()lst=lst[0:2]返回lst,例如df.withColumn('first_2letter',F.udf(get_string)(['col1','col2'))。这是正确的方法吗?然后在函数中再添加一个参数
def get_string(lst):    
    lst = str(lst)
    lst = lst.lower()
    lst = lst[0:2]
    return lst

import pyspark.sql.functions as F

df2 = df.withColumn('first_2letter', F.udf(get_string)('label'))

df2.show()
+---+------+-------------+
| id| label|first_2letter|
+---+------+-------------+
|  1| AxtTR|           ax|
|  2| HdyOP|           hd|
|  3|EqoPIC|           eq|
|  4|OkTEic|           ok|
+---+------+-------------+