无法解析列名Spark

时间:2018-12-23 01:46:41

标签: python python-3.x pyspark

我创建了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];;

问题是,我的加入逻辑是否有错误?如果不是,我该如何为歧义列做别名?

1 个答案:

答案 0 :(得分:0)

您的加入没有错误。两个数据框都有相同的列,因此您得到的数据框包含不明确的列名称。

这就是为什么按乘客排序会产生异常的原因。您需要按适当的别名排序。

df3.sort(df_flights.passengers)

或首先选择适当的列并进行排序。喜欢

df3.select(df_flights.passengers, df.origin_city, ......).sort("passengers").show()

在进行任何火花操作之前,您需要具有唯一性。