我创建了2个数据框,如下所示:
df_flights = spark1.read.parquet('domestic-flights\\flights.parquet')
df_airport_codes = spark1.read.load('domestic-flights\\flights.csv',format="csv",sep=",",inferSchema=True,header=True)
然后,我引用了databricks指南以免出现重复的列https://docs.databricks.com/spark/latest/faq/join-two-dataframes-duplicated-column.html
df3=df_flights.join(df_airport_codes,"origin_airport_code", 'left')
当我尝试按两个数据帧中的任何列进行排序时,我仍然遇到相同的错误
Py4JJavaError: An error occurred while calling o1553.filter.
:org.apache.spark.sql.AnalysisException:引用'passengers'是不明确的,可能是:乘客,乘客。
或者,如果我尝试排序:
df3.sort('passengers')
Py4JJavaError: An error occurred while calling o1553.sort.: org.apache.spark.sql.AnalysisException: cannot resolve '`passengers`' given input columns: [flights, destination_population, origin_city, distance, passengers, seats, flights, origin_population, passengers, flight_datetime, origin_air_port_code, flight_year, seats, origin_city, destination_city, destination_city, destination_airport_code, destination_airport_code, origin_population, destination_population, flight_month, distance];;
问题是,我的加入逻辑是否有错误?如果不是,我该如何为歧义列做别名?
答案 0 :(得分:0)
您的加入没有错误。两个数据框都有相同的列,因此您得到的数据框包含不明确的列名称。
这就是为什么按乘客排序会产生异常的原因。您需要按适当的别名排序。
df3.sort(df_flights.passengers)
或首先选择适当的列并进行排序。喜欢
df3.select(df_flights.passengers, df.origin_city, ......).sort("passengers").show()
在进行任何火花操作之前,您需要具有唯一性。