Python 未从pd.read\u csv读取输入文件
我试图使用pandas从apachebeam读取存储在google存储中的文件,但出错了Python 未从pd.read\u csv读取输入文件,python,pandas,apache-beam,Python,Pandas,Apache Beam,我试图使用pandas从apachebeam读取存储在google存储中的文件,但出错了 def Panda_a(self): import pandas as pd data = 'gs://tegclorox/Input/merge1.csv' df1 = pd.read_csv(data, names = ['first_name', 'last_name', 'age', 'preTestScore', 'postTestScore'])
def Panda_a(self):
import pandas as pd
data = 'gs://tegclorox/Input/merge1.csv'
df1 = pd.read_csv(data, names = ['first_name', 'last_name', 'age',
'preTestScore', 'postTestScore'])
return df1
ip2 = p |'Split WeeklyDueto' >> beam.Map(Panda_a)
ip7 = ip2 | 'print' >> beam.io.WriteToText('gs://tegclorox/Output/merge1234')
当我执行上述代码时,错误表示路径不存在。知道为什么吗?这段代码有很多地方不对劲
- 试图让熊猫从谷歌云存储读取文件。Pandas不支持Google云存储文件系统(正如@Andrew指出的,支持的方案有
,http
,ftp
,s3
)。但是,您可以使用Beam文件
API获取文件对象,并将该对象提供给Pandas,而不是文件路径FileSystems.open()
-p |……>>beam.Map(…)
使用给定函数beam.Map(f)
转换输入f
的每个元素,它不能应用于管道本身。在您的例子中,您似乎只想在没有任何输入的情况下运行Pandas代码。您可以通过提供虚假输入来模拟,例如PCollection
beam.Create(['ignored'])
要求beam.Map(f)
返回单个值(或者更像:如果它返回一个列表,它会将该列表解释为单个值),但您的代码为它提供了一个返回数据帧的函数。我强烈怀疑您是否希望创建一个包含单个元素的f
,其中该元素是整个数据帧-更可能的是,您希望数据帧的每一行有一个元素。为此,需要使用PCollection
,还需要beam.FlatMap
或类似的工具df.iterrows()
总的来说,我不知道为什么要使用Pandas读取CSV文件。您可以使用Beam的
ReadFromText
和skip_header_lines=1
来读取它,然后自己解析每一行-如果您有大量数据,这将更加高效(如果您只有少量数据,并且没有预料到它会变得足够大,超过一台机器的能力,比如说,如果它永远不会超过几GB,那么Beam就是一个错误的工具)。这段代码有很多问题
- 试图让Pandas读取Google云存储中的文件。Pandas不支持Google云存储文件系统(正如@Andrew指出的,支持的方案有
,http
,ftp
,s3
)。但是,您可以使用Beam文件
API获取文件对象,并将该对象提供给Pandas,而不是文件路径FileSystems.open()
-p |…>>beam.Map(…)
使用给定的函数beam.Map(f)
转换输入的每个元素f
,它不能应用于管道本身。在您的情况下,您似乎只想在没有任何输入的情况下运行Pandas代码。您可以通过提供虚假输入来模拟,例如PCollection
beam.Create(['ignored')
要求beam.Map(f)
返回单个值(或者更类似于:如果它返回一个列表,它会将该列表解释为单个值),但您的代码为它提供了一个返回Pandas数据帧的函数。我强烈怀疑您是否希望创建一个包含单个元素的f
,其中该元素是整个数据帧-更可能的是,您希望数据帧的每行有一个元素。为此,您需要使用PCollection
,并且您需要beam.FlatMap
或类似的东西df.iterrows()
一般来说,我不知道为什么要使用Pandas读取CSV文件。您可以使用Beam的
ReadFromText
和skip_header_lines=1
来读取CSV文件,然后自己解析每一行-如果您有大量数据,这将非常高效(如果您只有少量的数据,并且没有预料到它会变得足够大,超过一台机器的能力,比如说,如果它永远不会超过几GB,那么Beam就是错误的工具).好吧,错误本身告诉您问题所在,您尝试读取文件的路径不存在。因此,查看您的路径,它似乎是Google存储路径。为此,我认为您需要在执行代码的位置装入存储桶。路径是正确的。当我使用PCollection访问文件时,它工作正常,但是当我使用pandas访问文件时,它只会抛出错误。错误本身告诉您问题所在,您尝试读取文件的路径不存在。因此,查看您的路径,它似乎是Google存储路径。为此,我认为您需要在执行代码的位置装入存储桶。路径是正确的。当我使用pcollections访问文件时,它工作正常,但当我使用pandas访问文件时,它只会抛出错误。再次感谢老兄,因为我是apache beam的新手,这就是我面临这些问题的原因。再次感谢老兄,因为我是apache beam的新手,这就是我面临这些问题的原因。