Apabila menggunakan Scala, gunakan DecisionTreeModel.predict sebagai sebahagian daripada peta transformasi boleh menyebabkan pengecualian. Sebab untuk ini adalah berkaitan dengan panggilan ke kaedah JavaModelWrapper.call.
JavaModelWrapper.call memerlukan akses kepada SparkContext, yang, dalam konteks PySpark, berjalan pada pemandu. Walau bagaimanapun, transformasi peta berjalan pada nod pekerja, dan oleh itu memanggil JavaModelWrapper.call dari dalam peta adalah tidak dibenarkan.
Satu penyelesaian ialah merangkum kod Java sebagai pengguna -fungsi yang ditentukan (UDF) dan gunakannya dalam Spark SQL. Ini mengelakkan isu memanggil kod Java dari dalam tugas Python. Walau bagaimanapun, penyelesaian ini memerlukan penukaran data antara Python dan Scala dan memperkenalkan kerumitan tambahan.
Pilihan lain ialah membuat pembungkus perkhidmatan Java tersuai yang menyediakan antara muka kepada kod Java daripada Python. Pembalut ini boleh didaftarkan dengan Py4j dan diakses menggunakan org.apache.spark.api.java.JavaRDD.withContext untuk mendapatkan akses kepada SparkContext.
Sementara penyelesaian seperti Java UDF dan Pembalut perkhidmatan Java menyediakan penyelesaian untuk memanggil fungsi Java/Scala dari dalam tugas Spark, adalah penting untuk mempertimbangkan overhed dan pengehadan yang berkaitan dengan setiap pendekatan sebelum memilih penyelesaian terbaik untuk kes penggunaan khusus anda.
Atas ialah kandungan terperinci Cara Memanggil Fungsi Java/Scala dari Dalam Tugas Spark. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!