建议不要import *在Python中使用.
任何人都可以分享原因,以便我下次可以避免它吗?
当我尝试groupBy并获得max时,拥有这个数据帧我得到Column是不可迭代的:
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 …Run Code Online (Sandbox Code Playgroud) 我调用的PySpark DataFrame(不是pandas)df非常大collect().因此,下面给出的代码效率不高.它使用的是少量数据,但现在却失败了.
import numpy as np
myList = df.collect()
total = []
for product,nb in myList:
for p2,score in nb:
total.append(score)
mean = np.mean(total)
std = np.std(total)
Run Code Online (Sandbox Code Playgroud)
有没有办法通过使用或类似获得mean和std作为两个变量pyspark.sql.functions?
from pyspark.sql.functions import mean as mean_, std as std_
Run Code Online (Sandbox Code Playgroud)
withColumn但是,我可以使用这种方法逐行应用计算,并且它不返回单个变量.
更新:
样本内容df:
+----------+------------------+
|product_PK| products|
+----------+------------------+
| 680|[[691,1], [692,5]]|
| 685|[[691,2], [692,2]]|
| 684|[[691,1], [692,3]]|
Run Code Online (Sandbox Code Playgroud)
我应计算的平均值和标准偏差score值,例如值1中[691,1]的分数之一.
我一直在用 Spark 处理一个大数据集。上周,当我运行以下代码行时,它运行良好,现在它抛出一个错误:NameError: name 'split' is not defined。有人可以解释为什么这不起作用,我该怎么办?名称拆分未定义...我应该定义方法吗?它是我应该导入的依赖项吗?文档没有说我必须导入任何东西才能使用 split 方法。下面的代码。
test_df = spark_df.withColumn(
"Keywords",
split(col("Keywords"), "\\|")
)
Run Code Online (Sandbox Code Playgroud) 我要疯了吗?
from pyspark.sql.functions import *
sum([2,3,2])
Run Code Online (Sandbox Code Playgroud)
给出:
py4j.Py4JException: Method sum([class java.util.ArrayList]) does not exist
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到一个简单的总和?
幕后发生了什么火花让事情变得如此困难?