我有3台机器:1x Master,4x CPU,8G RAM; 2x执行器,带4x CPU和16G RAM。
主人是独立模式(没有YARN),我正在使用pyspark。
即使它不是一个庞大的基础设施,我仍然期待它的一些表现。
运行reduce
操作时:
tfsent = tfsent.reduce(lambda x,y: Row(tf=spvecadd(x.tf, y.tf), sentiment=spvecadd(x.sentiment, y.sentiment)))
其中tfsent
的{{1}}和tf
为sentiment
,而SparseVector
是自制函数,可添加spvecadd
这样做,在3x 4CPU上,执行程序中只有一个运行100%。其他是0%,内存大约是5G / 16G。 我没有得到: *为什么这么久 *为什么只有1x CPU工作。
我应该自己分区数据吗? (我的意思是明确地将数据分发给两个执行者?即使我认为这是Spark的工作)。
感谢您提供任何帮助,想法或提示 pltrdy
两个执行程序都连接到主服务器并“分配”到任务(可以使用spark web UI进行检查)
我有大约380k线。 Vector维度均小于100。 (这不是很多)。
复杂性可能更多地取决于维度而不是行数。
事实证明,我必须使用SparseVector
来分发RDD。这解决了我的问题,但不完全是我的问题:为什么我必须这样做?
我想这是因为我获取数据的方式。我正在读数据库,即
repartition(8)
其中,我猜不会分发它。