【问题标题】:Not able to use imported package on a dataframe column in PySpark (version 2.4.4) and Python version 3.6.8无法在 PySpark(2.4.4 版)和 Python 3.6.8 版中的数据框列上使用导入的包
【发布时间】:2021-01-29 19:52:55
【问题描述】:

在我的 AWS 集群中,我下载了一个 Python 包:

  python3 -m pip install Unidecode

现在,我想在名为 'city' 的 pyspark 数据框列上使用它,它采用以下值:'são paulo'、'seropédica' 等 (即带有重音符号) em> 并希望创建一个名为“city_no_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 行,加载中 返回pickle.loads(obj,编码=编码) ModuleNotFoundError: 没有名为“unidecode”的模块

但是,如果代替数据框列,我采用字符串变量,那么它工作正常。例如:

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

输出:“圣保罗”

那么,有没有一种方法可以将特定数据框列(即“城市”)的所有行转换为纯文本?

PySpark ==> 2.4.4 版

Python ==> 3.6.8 版

【问题讨论】:

标签: python dataframe apache-spark pyspark apache-spark-sql


【解决方案1】:

我找到了 1 个解决方案(虽然可能不是最佳解决方案)

首先将 PySpark Data Frame 转换为 Pandas Dataframe:

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

city_geolocation_mappings_results_df_pd = city_geolocation_mappings_results_df.toPandas()

那就使用这张票:How to replace accents in a column of a pandas dataframe

然后将 Pandas DF 转换回 PySpark DF。

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 2021-09-30
    • 1970-01-01
    • 2020-05-20
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多