Как исправить UnicodeEncodeError: в Pyspark при преобразовании строки Dataframe в строку - PullRequest
0 голосов
/ 10 января 2020

У меня есть простой фрейм данных с 3 столбцами.

+------------------+-------------------+-------+
|       NM1_PROFILE|  CURRENT_DATEVALUE|     ID|
+------------------+-------------------+-------+
|XY_12345678 – Main|2019-12-19 00:00:00|myuser1|
+------------------+-------------------+-------+

Все, что я хочу в выводе, - это одна строка, состоящая из всех значений в строке фрейма данных, разделенных запятой или каналом. Несмотря на то, что в фрейме данных много строк, я просто хочу, чтобы одна цель решала мою задачу.

XY_12345678 – Main,2019-12-19 00:00:00,myuser1

Я пробовал использовать ниже, и он работал нормально для других моих фреймов данных, но для выше это дает мне ошибку .

df.rdd.map(lambda line: ",".join([str(x) for x in line])).take(1)[0]

Ошибка при обнаружении "-"

UnicodeEncodeError: 'ascii' code c не может кодировать символ u '\ u2013' в позиции 12: порядковый номер не в диапазоне (128)

Я использую Spark 1.6 с Python 2 и пробовал -

import sys
reload(sys)
sys.setdefaultencoding('utf8')

1 Ответ

0 голосов
/ 11 января 2020

Согласно документации Spark 1.6, вы можете использовать функцию concat_ws, которая дает разделитель и набор столбцов, объединяет их в одну строку. Так что это должно решить вашу проблему

from pyspark.sql.functions import col, concat_ws
df.select(concat_ws(",", col("NM1_PROFILE"), col("CURRENT_DATEVALUE"), col("ID")).alias("concat")).collect()

Или, если вы предпочитаете более общий c способ, вы можете использовать что-то вроде этого:

from pyspark.sql.functions import col, concat_ws
cols = [col(column) for column in df.columns]
df.select(concat_ws(",", *cols).alias("concat")).collect()

Для получения дополнительной информации: https://spark.apache.org/docs/1.6.0/api/python/pyspark.sql.html#pyspark. sql .functions.concat_ws

Надеюсь, это поможет

...