簡體   English   中英

Python function 在 AWS Glue 中返回非類型,即使是在本地機器上工作的相同 function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM