无法解析...给定的输入列

时间:2018-08-09 00:50:18

标签: apache-spark pyspark apache-spark-sql

我正在阅读O'Reilly的 Spark:The Definitive Guide 一书,尝试执行简单的DataFrame操作时遇到错误。

数据类似于:

DEST_COUNTRY_NAME,ORIGIN_COUNTRY_NAME,count
United States,Romania,15
United States,Croatia,1
...

然后我用(在Pyspark中)阅读它:

flightData2015 = spark.read.option("inferSchema", "true").option("header","true").csv("./data/flight-data/csv/2015-summary.csv")

然后我尝试运行以下命令:

flightData2015.select(max("count")).take(1)

我收到以下错误:

pyspark.sql.utils.AnalysisException: "cannot resolve '`u`' given input columns: [DEST_COUNTRY_NAME, ORIGIN_COUNTRY_NAME, count];;
'Project ['u]
+- AnalysisBarrier
      +- Relation[DEST_COUNTRY_NAME#10,ORIGIN_COUNTRY_NAME#11,count#12] csv"

我什至不知道“ u”的来源,因为它不在我的代码中,也不在数据文件头中。我读到另一条建议,认为这可能是由标头中的空格引起的,但这不适用于此处。知道尝试什么吗?

注意:奇怪的是,当我使用SQL而不是DataFrame转换时,同样的事情也起作用。这有效:

flightData2015.createOrReplaceTempView("flight_data_2015")
spark.sql("SELECT max(count) from flight_data_2015").take(1)

我还可以执行以下操作,并且效果很好:

flightData2015.show()

1 个答案:

答案 0 :(得分:1)

您的问题是您正在调用内置的max函数,而不是pyspark.sql.functions.max

当python在代码中评估max("count")时,它返回字母'u',这是组成字符串的字母集合中的最大值。

print(max("count"))
#'u'

尝试以下方法:

import pyspark.sql.functions as f
flightData2015.select(f.max("count")).show()