Tener este dataframe estoy recibiendo Columna no es iterable cuando trato de agrupar y obtener max:

linesWithSparkDF
+---+-----+
| id|cycle|
+---+-----+
| 31|   26|
| 31|   28|
| 31|   29|
| 31|   97|
| 31|   98|
| 31|  100|
| 31|  101|
| 31|  111|
| 31|  112|
| 31|  113|
+---+-----+
only showing top 10 rows


ipython-input-41-373452512490> in runlgmodel2(model, data)
     65     linesWithSparkDF.show(10)
     66 
---> 67     linesWithSparkGDF = linesWithSparkDF.groupBy(col("id")).agg(max(col("cycle")))
     68     print "linesWithSparkGDF"
     69 

/usr/hdp/current/spark-client/python/pyspark/sql/column.py in __iter__(self)
    241 
    242     def __iter__(self):
--> 243         raise TypeError("Column is not iterable")
    244 
    245     # string methods

TypeError: Column is not iterable
InformationsquelleAutor oluies | 2016-04-28

2 Comentarios

  1. 17

    Es porque, ha sobrescrito el max definición proporcionada por apache-spark, era fácil de detectar porque max esperaba un iterable.

    Para solucionar este problema, puede utilizar una sintaxis diferente, y se debe trabajar.

    inesWithSparkGDF = linesWithSparkDF.groupBy(col("id")).agg({"cycle": "max"})

    o, alternativamente,

    from pyspark.sql.functions import max as sparkMax
    
    linesWithSparkGDF = linesWithSparkDF.groupBy(col("id")).agg(sparkMax(col("cycle")))
    • Gee : … i <3 scala!
    • eso es correcto 😉
  2. 0

    El general de manera de evitar este problema-que en realidad es un espacio de nombres de la colisión con un Python función integrada — es import Chispa SQL functions como este:

    from pyspark.sql import functions as F # USAGE: F.col(), F.max(), ...

    Y, utilizando el OP ejemplo, a continuación, aplicar F como este:

    linesWithSparkGDF = linesWithSparkDF.groupBy(F.col("id")) \
                                        .agg(F.max(F.col("cycle")))

Dejar respuesta

Please enter your comment!
Please enter your name here