Skip to main content
 首页 » 编程设计

python之在spark中加载多个文件时出现问题

2024年11月24日31wayfarer

我有几个要用 Spark 处理的 parquet 文件。我试过了

df = spark.read 
            .parquet('*.parquet') 
df.createOrReplaceTempView('df') 

但是当我运行一个 sql 查询时,例如:

SELECT col1, LAST(col1) FROM df   

它似乎只查看同一文件中的最后一个元素。这是预期的行为吗?如果是,是否有任何方法可以克服它?

我现在做的是:

fnames = !ls *.parquet 
df = None 
for fname in fnames: 
    if df is None:  
        df = spark.read.parquet(fname) 
    else:  
        df = df.union(spark.read.parquet(fname)) 

按预期工作,但确实很慢。

请您参考如下方法:

创建 sql 上下文:

import pyspark 
sc = pyspark.SparkContext('local', "retail") 
sqlContext = SQLContext(sc) 

使用 sql 上下文读取:

df = sqlContext.read.parquet(path/to/folder) 

以上代码读取路径指定的文件夹中的所有parquet文件。