当我尝试groupBy并获取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
4条答案
按热度按时间j7dteeu81#
这是因为,你已经覆盖了
apache-spark
提供的max
定义,很容易发现,因为max
需要一个iterable
。要解决这个问题,您可以使用不同的语法,它应该可以工作:
或者:
rhfm7lfc2#
避免这个问题的惯用方式是
import
Spark SQL functions module
,这是一些Spark SQL函数名和Python内置函数名之间不幸的命名空间冲突:然后,使用
OP's
示例,您只需像这样应用F
:在实践中,这是如何避免问题的**惯用 *.
=:)
vojdkbi03#
我知道这个问题已经很老了,但这可能会帮助一些人。
首先导入以下内容:
from pyspark.sql import functions as F
然后
linesWithSparkGDF = linesWithSparkDF.groupBy(col("id")).agg(F.max(col("cycle")))
4si2a6ki4#
我遇到了类似的问题,虽然错误看起来很淘气,但我们可以解决同样的问题,检查我们是否错过了以下导入-
从pyspark.sql函数导入 *
如果列的数据类型正确,这将获得所需的函数来聚合数据。我通过添加所需的导入修复了类似的问题,所以不要忘记检查...