运行 Spark ALS 程序 内存溢出

执行这个20几条记录,机器就会内存溢出,在本地、单机服务器都是这样。换个电脑也是这样。

8/10/31 22:18:26 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[Executor task launch worker for task 353,5,main]
java.lang.StackOverflowError
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1707)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2000)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
	at scala.collection.immutable.List$SerializationProxy.readObject(List.scala:479)
	at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	
Process finished with exit code 50

后来也改了代码,还会这样。不过才这么几条数据,就内存溢出,讲不通啊。
后来找到一个临时解决方法,就是删除这个application,重新运行。

删除后的第一次运行基本都能运行成功。第二次运行就会失败。
那么然后就在VM option 里面添加参数:-Xmx10G 。就又能运行几次。

后来跑30M文件也没有问题了。

运行 Spark ALS 程序 内存溢出_第1张图片

又对比了一下代码,之前代码里用了笛卡尔积,后来去掉了这段代码。去掉笛卡尔积的代码,能跑多点数据。有笛卡尔积的,还是会内存不足。

你可能感兴趣的:(DataScience)