我的情况如下: 我想向 Spark 提交一个 32 位的驱动程序。驱动程序位于 C#(.NET Framework 控制台应用程序)中。我使用 Mobius ( https://github.com/Microsoft/Mobius/releases ) 启用 Spark fo C#。
该应用程序相当简单,并且具有非常简单的测试代码:
public static void Main(string[] args)
{
var conf = new SparkConf();
var sparkContext = new SparkContext(conf);
var rdd = sparkContext.Parallelize(new List<string>() { "a", "b", "c", "d" });
var response = rdd.Map(s => s).Collect();
}
在我将此应用程序正确提交给 sparkclr(即,mobius 然后将其传递给 Spark 本身)后,我得到以下异常:
System.Exception: JVM method execution failed: Static method collectAndServe failed for class org.apache.spark.api.python.PythonRDD when called with 1 parameters ([Index=1, Type=JvmObjectReference, Value=11], )
at Microsoft.Spark.CSharp.Interop.Ipc.JvmBridge.CallJavaMethod(Boolean isStatic, Object classNameOrJvmObjectReference, String methodName, Object[] parameters)
at Microsoft.Spark.CSharp.Interop.Ipc.JvmBridge.CallStaticJavaMethod(String className, String methodName, Object[] parameters)
at Microsoft.Spark.CSharp.Proxy.Ipc.RDDIpcProxy.CollectAndServe()
at Microsoft.Spark.CSharp.Core.RDD`1.Collect()
当我在 x64 中构建应用程序时,异常消失了。此外,当应用程序在 x86 中构建但什么都不做(即没有
var rdd = sparkContext.Parallelize(new List<string>() { "a", "b", "c", "d" });
var response = rdd.Map(s => s).Collect();
行)。
是否有任何解决方法可以将 32 位应用程序提交到 Spark?
这可能是因为我有 64 位版本的 Java 吗?(我下载并安装的是jdk-8u161-windows-x64.exe)。