gpt4 book ai didi

python - 使用pyspark从本地系统读取文件时获取文件名

转载 作者:可可西里 更新时间:2023-11-01 16:38:50 25 4
gpt4 key购买 nike

补充更新:

我尝试为我存在于 hdfs 中的文件编写相同的代码,它正在工作,但是当我为我的本地文件系统使用相同的代码时,我收到错误。 Caused by: java.io.FileNotFoundException: File file:/root/cd/parsed_cd_5.xml 不存在


原始问题和初始更新

我正在使用 ElementTree 来解析 XML 文件。我在 python 中运行了代码,它运行起来很有魅力。但是当我尝试使用 spark 运行相同的程序时,我遇到了以下错误。

错误:

File "/root/sparkCD.py", line 82, in for filename in glob.glob(os.path.join(path, '*.xml')): File "/usr/lib64/python2.6/posixpath.py", line 67, in join elif path == '' or path.endswith('/'):

从错误中可以清楚地看出问题出在“for filename in glob.glob(os.path.join(path, '*.xml'))”。但我不知道如何在 pyspark 中实现同样的目标。因为我不能分享我的代码,所以我只会分享我遇到错误的代码片段,而不是我没有收到错误的 python 代码。

python :

path = '/root/cd'

for filename in glob.glob(os.path.join(path, '*.xml')):

tree = ET.parse(filename)

doc = tree.getroot()

Pyspark:

path = sc.textFile("file:///root/cd/")

for filename in glob.glob(os.path.join(path, '*.xml')):

tree = ET.parse(filename)

doc = tree.getroot()

我该如何解决这个问题。我想要的只是我当前正在使用 pyspark 在我的本地系统 cd 目录中处理的文件名。如果这对您来说听起来很愚蠢,请原谅我。

更新:

我尝试了下面给出的建议,但我没有得到文件名。下面是我的代码:

filenme = sc.wholeTextFiles("file:///root/cd/")
nameoffile = filenme.map(lambda (name, text): name.split("/").takeRight(1)(0)).take(0)
print (nameoffile)

我得到的结果是

PythonRDD[22] at RDD at PythonRDD.scala:43

更新: 我写了下面的代码而不是 wholeTextFiles 但我遇到了同样的错误。我还想说,根据我的问题,我想获取我的文件的名称,因此 textFile 不会帮助我。我尝试运行您建议的代码,但得到的结果相同。

path = sc.textFile("file:///root/cd/")

print (path)

最佳答案

如果输入目录包含许多小文件,那么 wholeTextFiles 会有所帮助,查看详细说明 here .

>>pairRDD = sc.wholeTextFiles('<path>') 
>>pairRDD.map(lambda x:x[0]).collect() #print all file names

pairRDD 每条记录包含作为绝对文件路径的键和作为整个文件内容的值。

关于python - 使用pyspark从本地系统读取文件时获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com