当我将本地值设置为1时,操作正常,但当设置为2时,错误消息报告如下
from pyspark import SparkContext
# Changing 1 to 2 will give you an error
sc = SparkContext("local[2]", "sort")
class MySort:
def __init__(self, tup):
self.tup = tup
def __gt__(self, other):
if self.tup[0] > other.tup[0]:
return True
elif self.tup[0] == other.tup[0]:
if self.tup[1] >= other.tup[1]:
return True
else:
return False
else:
return False
r1 = sc.parallelize([(1, 2), (2, 2), (2, 3), (2, 1), (1, 3)])
r2 = r1.sortBy(MySort)
print(r2.collect())
Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last): File "E:\spark2.3.1\spark-2.3.1-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\worker.py", line 230, in main File "E:\spark2.3.1\spark-2.3.1-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\worker.py", line 225, in process File "E:\spark2.3.1\spark-2.3.1-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\serializers.py", line 376, in dump_stream bytes = self.serializer.dumps(vs) File "E:\spark2.3.1\spark-2.3.1-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\serializers.py", line 555, in dumps return pickle.dumps(obj, protocol) _pickle.PicklingError: Can't pickle : attribute lookup MySort on __main__ failed
spark的属性真的很有趣,我以前不知道。我认为当您使用单核时,类不会被pickle(pickle需要在其他地方使用类)。但您仍然可以使用函数(我假设您按前两个值对值进行排序):
key_func = lambda tup : tup[:2]
r1 = sc.parallelize([(1, 2), (2, 2), (2, 3), (2, 1), (1, 3)])
r2 = r1.sortBy(key_func)
print(r2.collect())
问题内容: 刚开始。遇到此错误,也没有运气找到原因或原因: 如果创建一个结构,显然可以分配和重新分配值,这没有问题: 但是如果结构是映射中的一个值: 我懂了。就是这样,没有其他信息。http://play.golang.org/p/VRlSItd4eP 我找到了解决方法- 在Person上创建一个func,可以将其调用并将结果分配给map键,例如。 但是,我的问题是,此“无法分配”错误的原因是什么
我刚刚安装了Ubuntu desktop 12.04并通过以下方式安装了Java 6 JDK: 但是当我转到时,我没有看到一个名为的目录,所以我认为它根本不存在!?! 当我转到时,我看到: 我现在正试图将作为环境变量添加到中,以便从基于shell的Ant构建中访问它: ? ? 还有别的吗? 我所说的“”是指我在系统上安装的JDK6的顶级目录,无论它在哪里······
问题内容: 我一直在尝试hibernate,Spring和Servlet。现在,我被卡住了。为什么会出现此异常?我认为将hbm2ddl.auto设置为create时会自动创建表。 appicationContext.xml UserDetails.java Main.java 例外 问题答案: 属性名称应以hibernate作为前缀。 顺便说一句,有一种更简单的方法来配置属性,如下所示
我真的不明白二进制系统是怎么工作的,有人能解释一下为什么当我把它从长到短转换时,它会从正变为负吗? 输出:-32768