Чтение текстового файла через UDF в pyspark возвращает неожиданный вывод - PullRequest
0 голосов
/ 14 июня 2019

У меня есть фрейм данных pyspark df, содержащий пути к текстовым файлам.Я хочу создать новый столбец с содержимым текстовых файлов.

import pyspark.sql.functions as F
from pyspark.sql.types import *

def read_file(filepath): 
    import s3fs
    s3 = s3fs.S3FileSystem()
    with s3.open(filepath) as f:
        return f.read()

read_file_udf = F.udf(read_file, StringType())

df.withColumn('raw_text', read_file_udf('filepath')).show()

+---------------------+-----------+
|  file               |   raw_text|
+---------------------+-----------+
|s3://bucket/file1.txt| [B@aa2a4f3|
|s3://bucket/file2.txt|[B@138664c5|
|s3://bucket/file3.txt| [B@3bcc67e|
|s3://bucket/file4.txt|[B@70b735c4|
|s3://bucket/file5.txt|[B@6fad821d|
+---------------------+-----------+

Вместо того, чтобы получать фактическое содержимое файла, я получаю эти странные [B@ коды.Что они, почему я их получаю и как это исправить?

1 Ответ

0 голосов
/ 14 июня 2019

Чтобы ответить на мой собственный вопрос ... Я получил [B@, потому что функция read_file() возвращала байтовое представление строки. Определение:

def read_file(filepath): 
    import s3fs
    s3 = s3fs.S3FileSystem()
    with s3.open(filepath) as f:
        return f.read().decode("utf-8")

исправит проблему.

...