读取多个文件,但找出我当前在哪个文件上

Posted

技术标签:

【中文标题】读取多个文件,但找出我当前在哪个文件上【英文标题】:read multiple files, but figure out which file I am currently on 【发布时间】:2018-12-21 23:08:19 【问题描述】:

我想使用这个语法:

sc.textFile(','.join(files))

不过,我还需要将每一行与相应的文本文件进行匹配,并稍后将其保存到 db。有没有办法将文件名附加到 rdd 或以某种方式知道我当前正在阅读哪个文件?最后我想要一个带有字符串(文件行内容)和另一个字符串(相应文件名)的df。

【问题讨论】:

您可能希望提供更完整的代码 sn-p 以便我们了解一些上下文 rdddf 是什么? 【参考方案1】:

我想出了一个解决方案,希望它能对某人有所帮助。 我正在阅读带有 jsonl 文件的目录。我得到的是一个数据框,其中第一列是该行的值,第二列是该行来自的文件名:

from pyspark.sql.functions import input_file_name
.......
read_files = spark.sparkContext.textFile(some_dir_with_files)
lines = read_files.map(lambda x: x.encode("ascii", "ignore"))
json_data = lines.map(lambda line: json.loads(str(line)))
df = spark.createDataFrame(json_data, StringType())
df_with_file_names = df.withColumn("file_name", input_file_name())
return df_with_file_names

【讨论】:

以上是关于读取多个文件,但找出我当前在哪个文件上的主要内容,如果未能解决你的问题,请参考以下文章

C++ 文件 - 写入、读取、数组; [关闭]

CSVHelper 使用每个文件上的多个映射解析多个 CSV

在 Jupyter Windows 上使用 pool 并行读取多个文件需要很长时间:

读取多个文件但在 python 中对一个文件执行摘要的优雅方式

增量读取 UIDocument 时使用哪个线程来执行异步文件访问使用块

AmazonClientException:读取的数据长度与预期不同