代码之家  ›  专栏  ›  技术社区  ›  Stephen

无法解析…给定的输入列

  •  3
  • Stephen  · 技术社区  · 7 年前

    我正在经历 火花:权威指南 从O'Reilly预订,当我尝试执行简单的数据帧操作时遇到错误。

    数据如下:

    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 回复  |  直到 7 年前
        1
  •  4
  •   pault Tanjin    7 年前

    你的问题是你正在调用内置的 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()