Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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 在Spark中读取多个CSV文件并生成数据帧_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 在Spark中读取多个CSV文件并生成数据帧

Python 在Spark中读取多个CSV文件并生成数据帧,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我使用以下代码读取多个csv文件,并将其转换为pandas df,然后将其转换为单个pandas df。最后再次转换为spark数据帧。我想跳过转换到df部分,只想使用spark数据帧 文件路径 abfss://xxxxxx/abc/year=2021/month=1/dayofmonth=1/hour=1/*.csv abfss://xxxxxx/abc/year=2021/month=1/dayofmonth=1/hour=2/*.csv ...... 代码 list = [] f

我使用以下代码读取多个csv文件,并将其转换为pandas df,然后将其转换为单个pandas df。最后再次转换为spark数据帧。我想跳过转换到df部分,只想使用spark数据帧

文件路径

 abfss://xxxxxx/abc/year=2021/month=1/dayofmonth=1/hour=1/*.csv
 abfss://xxxxxx/abc/year=2021/month=1/dayofmonth=1/hour=2/*.csv
......
代码

list = []


for month in range(1,3,1):
  for day in range(1,31,1):
    for hour in range(0,24,1):
      file_location = "//xxxxxx/abc/year=2021/month="+str(month)+"/dayofmonth="+str(day)+"/hour="+str(hour)+"/*.csv"    
     
        try : 
          spark_df = spark.read.format("csv").option("header", "true").load(file_location)
          pandas_df = spark_df.toPandas()
          list.append(pandas_df)
    
    
        except AnalysisException as e:
          print(e)

final_pandas_df = pd.concat(list)
df = spark.createDataFrame(final_pandas_df)

您可以加载所有文件并对分区列应用筛选器:

df = spark.read.format("csv").option("header", "true").load("abfss://xxxxxx/abc/").filter(
    'year = 2021 and month between 1 and 2 and day between 1 and 30 and hour between 0 and 23'
)


该命令一直在运行,即使我尝试使用
year=2021和month=1和day=1,以及0到10之间的hour
如果您有很多文件或分区,可能需要一些时间。您可以尝试将
year=2021
添加到加载路径。。。它可能有助于减少需要扫描的分区数。这里的问题是每月的
,而不仅仅是
,现在它工作正常,但我发现它比以前的方法慢。对不起,这是一个打字错误。。。你说得对,应该是
dayofmonth
。只是一个小查询,如果我想获取2020年11月-2021年2月的数据,11到2之间的
月是否可行?