无法在pyspark(版本2.4.4)和python版本3.6.8中的dataframe列上使用导入的包

j2datikz  于 2021-05-22  发布在  Spark
关注(0)|答案(1)|浏览(590)

在我的aws群集中,我下载了一个python包:

python3 -m pip install Unidecode

现在,我想在名为'city'的pysparkDataframe列中使用它,该列的值如下:'sã圣保罗,塞洛普édica'etc(即带有口音),并希望创建一个名为'city\u no\u accents'的新列,该列将更正文本中的所有口音,并使其成为普通英语文本,如'sao paulo'、'seropedica'等。
所以,我写了下面的pyspark代码:

<...imported some other packages>
from unidecode import unidecode

def remove_accents(data):
    return unidecode(data)

if __name__ == '__main__':
    #create spark session
    spark = SparkSession.sparkSession("GetData")
    sc = spark.getSparkSession()
    logging.info("Spark Session initiated")
    sm = sparkManager.sparkManager(sc)
    remove_accents_udf = udf(remove_accents)

city_df_with_accents = city_df['city'] 

city_df_without_accents = city_df_with_accents.withColumn('city_no_accents', remove_accents_udf('city'))

city_df_without_accents.show(5)

上面代码的最后一行给出了以下错误:
文件“/usr/lib/spark/python/pyspark/serializers.py”,第580行,在loads return pickle.loads(obj,encoding=encoding)modulenotfounderror:没有名为“unidecode”的模块
但是如果我用一个字符串变量来代替dataframe列,那么它就可以正常工作了。例如:

x = 'são paulo'
remove_accents_udf(x)

输出:“圣保罗”
那么,有没有一种方法可以将特定Dataframe列(即“city”)的所有行转换为纯文本?
pyspark==>版本2.4.4
python==>版本3.6.8

yzuktlbb

yzuktlbb1#

我找到了一个解决方案(虽然可能不是最佳方案)
首先将pysparkDataframe转换为pandasDataframe:

import pandas as pd
from pyspark.sql.types import * 

city_geolocation_mappings_results_df_pd = city_geolocation_mappings_results_df.toPandas()

然后利用这个问题:如何替换Dataframe列中的重音符号
然后将Pandasdf转换回pyspark df。

相关问题