[英]Python function returns non-type in AWS Glue even the same function working in local machine
我是 AWS 胶水的新手。 我有一个创建的作业,可以从列中修改电话号码并更新数据框。 下面的脚本在我使用 pyspark 运行的本地机器上运行良好,这基本上对那些不以“0”开头的电话号码添加了“+00”
## Phonenubercolum
6-451-512-3627
0-512-582-3548
1-043-733-0050
def addCountry_code(phoneNo):
countryCode= '+00'+phoneNo
if phoneNo[:1] !='0':
return str(countryCode)
else:
return str(phoneNo)
phone_replace_udf=udf(lambda x: addCountry_code(x), StringType())
phoneNo_rep_DF= concatDF.withColumn("phoneNumber", phone_replace_udf(sf.col('phoneNumber')))#.drop('phoneNumber')
##output
+006-451-512-3627
0-512-582-3548
+001-043-733-0050
但是当我在胶水上下文中运行相同的代码时,它会引发以下错误
addCountry_code countryCode= '+00'+phoneNo **TypeError: must be str, not NoneType**
我想知道这个 function 如何在胶水上失效?
感谢是否有人可以提供帮助?
您可以在不使用 udf 的情况下实现这一点(udf 通常比内置函数慢)。
from pyspark.sql import SparkSession
from pyspark.sql.functions import udf, col, lit
spark = SparkSession.builder.getOrCreate()
## Phonenubercolum
ds = [{'PhoneNumber': '6-451-512-3627'},
{'PhoneNumber': '0-512-582-3548'},
{'PhoneNumber': '1-043-733-0050'}]
df = spark.createDataFrame(ds)
df = df.withColumn('PhoneNumber', when(
~df['PhoneNumber'].startswith('0'), concat(lit('+00'), df['PhoneNumber'])) \
.otherwise(df['PhoneNumber']))
df.show()
+-----------------+
| PhoneNumber|
+-----------------+
|+006-451-512-3627|
| 0-512-582-3548|
|+001-043-733-0050|
+-----------------+
这应该会产生预期的结果。 使用spark.udf.register注册 function
import json
import boto3
import pyspark.sql.dataframe
from pyspark.sql.types import StringType
ds = [{'phoneNumber': '6-451-512-3627'},
{'phoneNumber': '0-512-582-3548'},
{'phoneNumber': '1-043-733-0050'}]
sf = spark.createDataFrame(ds)
def addCountry_code(phoneNo):
countryCode= '+00'+phoneNo
if phoneNo[:1] !='0':
return str(countryCode)
else:
return str(phoneNo)
spark.udf.register('phone_replace_udf', lambda x: addCountry_code(x), StringType())
sf.createOrReplaceTempView('sf')
spark.sql('select phone_replace_udf(phoneNumber) from sf').collect()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.