我有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@
代码。他们是什么,我为什么要得到它们,我该如何解决?
答案 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")
将解决此问题。