使用udf将python apply函数中的等效代码应用于Pyspark代码
下面的代码是用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"),
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|
+---+------+-------------+