【发布时间】: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