Мне нужно импортировать CSV
файл в Spark
и преобразовать его в DF
, а затем в RDD
перед обработкой.
Сначала я импортирую полный файл CSV
как DF
stopwords_df = (
sqlc
.read
.format('csv')
.option('header', True)
.option('delimiter', ';')
.option('encoding', 'latin1')
.load('/mnt/sparkdata/stopwords.csv', schema = stopSchema)
.repartition(72)
)
Затем я выбираю только подходящие слова и превращаю их в набор
stopwords_set = set(
stopwords_df
.filter(f.col('retain').isNull())
.rdd
.map(lambda x: x[0].encode('latin1')) # the [0] is to extract strings from Rows
.collect()
)
Я запутался с кодировкой и не знаю, как это исправить.
Если я «покажу» DF
, латинские буквы будут показаны правильно (sperò)
stopwords_df.show(100, truncate = False)
+--------------+--------+------+----------+------+
|word |language|type |doubletype|retain|
+--------------+--------+------+----------+------+
|informava |IT |verbo |null |null |
|sperò |IT |verbo |null |null |
|four |EN |null |null |null |
Но этого не произойдет, если я покажу СДР
(
stopwords_df
.filter(f.col('word') == r'sperò')
.rdd
.first()
)
Row(word=u'sper\xf2', language=u'IT', type=u'verbo', doubletype=None, retain=None)
С UTF-8 encoding
тоже будет хуже
+--------------+--------+------+----------+------+
|word |language|type |doubletype|retain|
+--------------+--------+------+----------+------+
|thanks |EN |saluto|null |null |
|fossero |IT |verbo |null |null |
|sper� |IT |verbo |null |null |
Не могли бы вы предложить мне, как это исправить?