[英]Loop through RDD elements, read its content for further processing
我有一个包含n
个文件的文件夹。
我正在创建一个 RDD,其中包含上述文件夹的所有文件名,代码如下:
fnameRDD = spark.read.text(filepath).select(input_file_name()).distinct().rdd)
我想遍历这些RDD
元素并处理以下步骤:
我已经写了一个 Function,其中包含我已经针对单个文件测试过的步骤并且它工作正常但是我在语法上尝试了各种方法来完成前 2 个步骤,但我每次都得到无效的语法。
我知道我不应该使用map()
因为我想在每次迭代中读取一个需要sc
的文件,但是map
将在无法引用sc
的工作节点内执行。
另外,我知道我可以使用wholeTextFiles()
作为替代方法,但这意味着我将在整个过程中拥有 memory 中所有文件的文本,这对我来说似乎效率不高。
我也愿意接受有关不同方法的建议。
我相信您正在寻找递归文件查找,
spark.read.option("recursiveFileLookup", "true").text(filepathroot)
如果将其指向文件的根目录,spark 将遍历该目录并选取位于根文件夹和子文件夹下的所有文件,这会将文件读入单个 dataframe
可能还有其他更有效的方法,但假设您已经有一个 function SomeFunction(df: DataFrame[value: string])
,最简单的方法是在fnameRDD
上使用toLocalIterator()
一次处理一个文件。 例如:
for x in fnameRDD.toLocalIterator():
fileContent = spark.read.text(x[0])
# fileContent.show(truncate=False)
SomeFunction(fileContent)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.