Python 在Spark中读取多个CSV文件并生成数据帧
我使用以下代码读取多个csv文件,并将其转换为pandas df,然后将其转换为单个pandas df。最后再次转换为spark数据帧。我想跳过转换到df部分,只想使用spark数据帧 文件路径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
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之间的月是否可行?