Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未从pd.read\u csv读取输入文件_Python_Pandas_Apache Beam - Fatal编程技术网

Python 未从pd.read\u csv读取输入文件

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'])

我试图使用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'])
    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
    FileSystems.open()
    API获取文件对象,并将该对象提供给Pandas,而不是文件路径
  • p |……>>beam.Map(…)
    -
    beam.Map(f)
    使用给定函数
    f
    转换输入
    PCollection
    的每个元素,它不能应用于管道本身。在您的例子中,您似乎只想在没有任何输入的情况下运行Pandas代码。您可以通过提供虚假输入来模拟,例如
    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
    FileSystems.open()
    API获取文件对象,并将该对象提供给Pandas,而不是文件路径
  • p |…>>beam.Map(…)
    -
    beam.Map(f)
    使用给定的函数
    f
    转换输入的每个元素
    PCollection
    ,它不能应用于管道本身。在您的情况下,您似乎只想在没有任何输入的情况下运行Pandas代码。您可以通过提供虚假输入来模拟,例如
    beam.Create(['ignored')
  • beam.Map(f)
    要求
    f
    返回单个值(或者更类似于:如果它返回一个列表,它会将该列表解释为单个值),但您的代码为它提供了一个返回Pandas数据帧的函数。我强烈怀疑您是否希望创建一个包含单个元素的
    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的新手,这就是我面临这些问题的原因。