में नेस्टेड विधि के साथ "कार्य क्रमबद्ध नहीं करें" से बचें, मैं सामान्य "टास्क सीरियलज़ेबल" समस्या को समझता हूं जो किसी फ़ील्ड तक पहुंचने या बंद होने के दायरे से बाहर होने वाली विधि को उत्पन्न करता है।कक्षा
इसे ठीक करने के लिए, मैं आमतौर पर इन क्षेत्रों/तरीकों की एक स्थानीय प्रति है, जो पूरी कक्षा को क्रमानुसार करने की जरूरत से बचा जाता है परिभाषित: अब
class MyClass(val myField: Any) {
def run() = {
val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv")
val myField = this.myField
println(f.map(_ + myField).count)
}
}
, अगर मैं रन विधि में एक नेस्टेड समारोह को परिभाषित, यह धारावाहिक नहीं किया जा सकता:
class MyClass() {
def run() = {
val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv")
def mapFn(line: String) = line.split(";")
val myField = this.myField
println(f.map(mapFn(_)).count)
}
}
मुझे समझ नहीं आता के बाद से मैंने सोचा था कि "mapFn" दायरे में होगा ... भी अजनबी, अगर मैं परिभाषित mapFn एक डीईएफ़ के बजाय एक वैल हो सकता है, तो यह काम करता है :
class MyClass() {
def run() = {
val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv")
val mapFn = (line: String) => line.split(";")
println(f.map(mapFn(_)).count)
}
}
क्या यह स्कैला नेस्टेड कार्यों का प्रतिनिधित्व करने के तरीके से संबंधित है?
इस मुद्दे से निपटने के लिए अनुशंसित तरीका क्या है? नेस्टेड कार्यों से बचें?
मैं इसे भी देख रहा हूं, एक बार जब वे वैल में बदल जाते हैं तो यह काम करता है! तो इस अवलोकन को साझा करने के लिए धन्यवाद। – MahdeTo