在 Pyspark 中使用循环加入不同的 DataFrame

Join different DataFrames using loop in Pyspark

我在一个文件中有 5 个 CSV 文件,想将它们加入 Pyspark 中的一个数据框中:我使用下面的 代码:

name_file =['A', 'B', 'C', 'D', 'V']
for n in name_file:
n= spark.read.csv(fullpath+n+'.csv'
                ,header=False, 
                inferSchema= True)
full_data=full_data.join(n,["id"])

错误:我得到了一个意外的结果 > 最后一个数据帧与自身连接。

预期结果:应该有 6 列,每个 CSV 有 2 个数据框,其中一个与其他数据框相同。联接应该在此列上。因此,最终的数据框应该有一个公共列和每个 CSV 文件中的 5 个特殊列。

代码似乎有几处错误,或者您可能没有提供完整的代码。

  1. 你定义完整路径了吗?
  2. 你设置了 header=False 那么 spark 怎么知道有一个 “id”列?
  3. 您在 for 循环下的缩进看起来不对。
  4. full_data还没有定义,你是怎么用的 for循环中评估的右侧?我怀疑你有 将其初始化为第一个 csv 文件,然后尝试加入 再次使用第一个 csv。

我 运行 对下面的代码进行了一次小测试,它对我有用并解决了我上面提出的问题。您可以根据需要进行调整。

fullpath = '/content/sample_data/'
full_data = spark.read.csv(fullpath+'Book1.csv'
                      ,header=True, 
                      inferSchema= True)
name_file =['Book2', 'Book3']
for n in name_file:
  n= spark.read.csv(fullpath+n+'.csv'
                      ,header=True, 
                      inferSchema= True)
  full_data=full_data.join(n,["id"])
full_data.show(5)