0
比方说,我有一个数据帧,看起来像这样:应用自定义功能,数据帧的选定列的细胞PySpark
+---+-----------+-----------+
| id| address1| address2|
+---+-----------+-----------+
| 1|address 1.1|address 1.2|
| 2|address 2.1|address 2.2|
+---+-----------+-----------+
我想直接将自定义函数的字符串地址1和地址2列,例如:
def example(string1, string2):
name_1 = string1.lower().split(' ')
name_2 = string2.lower().split(' ')
intersection_count = len(set(name_1) & set(name_2))
return intersection_count
我想要的结果存储在一个新列,让我最后的数据帧将如下所示:
+---+-----------+-----------+------+
| id| address1| address2|result|
+---+-----------+-----------+------+
| 1|address 1.1|address 1.2| 2|
| 2|address 2.1|address 2.2| 7|
+---+-----------+-----------+------+
我试过的方式我曾经应用了内置函数的整列来执行它,但我得到了一个错误:
>>> df.withColumn('result', example(df.address1, df.address2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in example
TypeError: 'Column' object is not callable
什么我做错了,我怎么可以将自定义函数应用于选定列中的字符串?
谢谢!我还有一个问题:为什么我们要特别使用LongType()?它是否与给定函数返回的数据类型有关? – Angelika
是的,它应该是给定函数的返回类型 – dumitru
我可以传递不是来自数据框的附加参数吗?例如,如果我想将示例定义为: def示例(source_name1,source_name2,string1,string2): 返回json.dumps({source_name1:string1,source_name2:string2}) – Angelika