Python 仅从Libpostal(Pypostal)-PySpark获取街道和国家信息

Python 仅从Libpostal(Pypostal)-PySpark获取街道和国家信息,python,apache-spark,pyspark,user-defined-functions,Python,Apache Spark,Pyspark,User Defined Functions,我正在使用libposal-pyposal解析地址,但我只需要道路和国家数组[“富兰克林大街”、“美国”],[“伦纳德街”、“英国”] 我怎样才能做到这一点 返回类型为net.razorvine.pickle.objects.classdictconstructor from pyspark.sql.functions import udf LIBPOSTAL_LOADED = False @udf("string") def parse(address): from

我正在使用
libposal
-
pyposal
解析地址,但我只需要
道路
国家
数组
[“富兰克林大街”、“美国”],[“伦纳德街”、“英国”]

我怎样才能做到这一点

返回类型为
net.razorvine.pickle.objects.classdictconstructor

from pyspark.sql.functions import udf

LIBPOSTAL_LOADED = False
@udf("string")
def parse(address):
   from postal.parser import parse_address

   address_parsed = parse_address(address)

   return str(address_parsed)

spark.createDataFrame(['781 Franklin Ave Crown Heights Brooklyn NYC NY 11216 USA','The Book Club 100-106 Leonard St, Shoreditch, London, Greater London, EC2A 4RH, United Kingdom'], "string").toDF("address").select(parse("address")).show(truncate=False)

@MCK应要求更新

@udf("array<string>")
def parse(address):
   from postal.parser import parse_address

   address_parsed = [a[0] for a in parse_address(address) if a[1] in ['road', 'country']]

   return address_parsed

+------------------+
|[franklin ave,usa]|
+------------------+
@udf(“数组”)
def解析(地址):
从postal.parser导入解析_地址
地址解析=[a[0]表示解析中的地址(地址),如果[1]位于['road','country']]
已解析返回地址
+------------------+
|[美国富兰克林大街]|
+------------------+
这是意料之中的 ############################################################################

@udf(“数组”)
def解析(地址):
从postal.parser导入解析_地址
地址解析=[a[0]表示解析中的地址(地址),如果[1]位于['road','country']]
返回地址\u已解析[0]
+-----+
|空的|
+-----+

这并不像预期的那样。我希望第一个元素来自
address\u parsed
,即
franklin ave

在返回解析后的地址之前,您可以尝试列表理解:

@udf("array<string>")
def parse(address):
   from postal.parser import parse_address

   address_parsed = [a[0] for a in parse_address(address) if a[1] in ['road', 'country']]

   return address_parsed
@udf(“数组”)
def解析(地址):
从postal.parser导入解析_地址
地址解析=[a[0]表示解析中的地址(地址),如果[1]位于['road','country']]
已解析返回地址

我还有一个问题。它返回一个字符串列表,但我无法访问列表中的项目,例如道路的
解析地址[0]
解析地址可能为None/null?如果['road']中有[1]解析地址,您是否可以尝试
解析地址=[a[0]解析内地址(地址)]
解析返回地址
?由于返回的是
“franklin ave”
,而不是
[“franklin ave”]
,因此返回空值。如果需要
数组
,则需要返回
字符串作为返回类型。
@udf("array<string>")
def parse(address):
   from postal.parser import parse_address

   address_parsed = [a[0] for a in parse_address(address) if a[1] in ['road', 'country']]

   return address_parsed