通过pyspark中的UDF读取文本文件返回意外输出

时间:2019-06-14 11:25:08

标签: amazon-web-services dataframe pyspark user-defined-functions

我有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 :(得分:0)

要回答我自己的问题,我得到[B@是因为read_file()函数正在返回字符串的字节表示形式。定义:

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

将解决此问题。