读取多个文件,但找出我当前在哪个文件上
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 以便我们了解一些上下文rdd
和 df
是什么?
【参考方案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
【讨论】:
以上是关于读取多个文件,但找出我当前在哪个文件上的主要内容,如果未能解决你的问题,请参考以下文章
CSVHelper 使用每个文件上的多个映射解析多个 CSV
在 Jupyter Windows 上使用 pool 并行读取多个文件需要很长时间:
读取多个文件但在 python 中对一个文件执行摘要的优雅方式