在我的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
1条答案
按热度按时间yzuktlbb1#
我找到了一个解决方案(虽然可能不是最佳方案)
首先将pysparkDataframe转换为pandasDataframe:
然后利用这个问题:如何替换Dataframe列中的重音符号
然后将Pandasdf转换回pyspark df。