通过 pyspark 中的 UDF 读取文本文件返回意外输出
Posted
技术标签:
【中文标题】通过 pyspark 中的 UDF 读取文本文件返回意外输出【英文标题】:Read text file via UDF in pyspark returns unexpected output 【发布时间】:2019-06-14 11:25:08 【问题描述】:我有 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】:回答我自己的问题...我得到了[B@
,因为read_file()
函数正在返回字符串的字节表示。定义:
def read_file(filepath):
import s3fs
s3 = s3fs.S3FileSystem()
with s3.open(filepath) as f:
return f.read().decode("utf-8")
将解决问题。
【讨论】:
以上是关于通过 pyspark 中的 UDF 读取文本文件返回意外输出的主要内容,如果未能解决你的问题,请参考以下文章