दिलचस्प पोस्ट
XML से C # वर्ग उत्पन्न करें कैसे एक प्रतिबद्ध में सभी फाइलों की सूची है? उत्परिवर्ती बनाम अपरिवर्तनीय वस्तुओं CSS3 के साथ हेक्सागोनल पैटर्न दोहराते उत्पन्न करें चयन बॉक्स विकल्प पृष्ठभूमि रंग बदलने के लिए कैसे? क्या अंतर्निहित प्रकार डिफ़ॉल्ट कन्स्ट्रक्टर हैं? स्काला पहचानकर्ता "निहित" क्या है? आप कैसे सी # में कोड के साथ नेटवर्क सेटिंग्स (आईपी पता, डीएनएस, WINS, होस्ट नाम) बदल सकते हैं जावा में एक यादृच्छिक BigInteger मान कैसे उत्पन्न करें? जावास्क्रिप्ट का उपयोग करके विशिष्ट देरी के बाद स्क्रिप्ट निष्पादित करें अनपेक्षित जावास्क्रिप्ट दिनांक व्यवहार दोहराव के बिना NSArray से यादृच्छिक वस्तु प्राप्त करना "जावा हीप स्पेस" और "मेमोरी आउट आउट" प्राप्त करते समय ग्रहण स्मृति सेटिंग्स 1 डी में एक 2 डी एक्सेल तालिका "फ्लैटन" या "पतन" कैसे करें? जावास्क्रिप्ट डायनेमिक वैरिएबल नेम

अपडेट की हुई पंक्ति में डेटाफ्रेम पंक्ति को मैप करने का प्रयास करते समय एन्कोडर त्रुटि

जब मैं नीचे बताए अनुसार मेरे कोड में एक ही चीज़ करने की कोशिश कर रहा हूं I

dataframe.map(row => { val row1 = row.getAs[String](1) val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2)) }) 

मैंने यहां से उपरोक्त संदर्भ लिया है: स्कला: मैं स्केल का उपयोग करके डेटाफ्रेम में मान को कैसे बदल सकता हूं लेकिन मुझे एन्कोडर त्रुटि मिल रही है

डेटासेट में संग्रहीत प्रकार के लिए एन्कोडर खोजने में असमर्थ आदिम प्रकार (इंट, एस ट्रिंग, आदि) और उत्पाद प्रकार (केस क्लास) स्पार्क.आईएम प्लिकिट्स आयात करके समर्थित हैं। अन्य प्रकारों के क्रमबद्ध करने के लिए समर्थन भविष्य के रिलीज में जोड़े जाएंगे।

नोट: मैं स्पार्क 2.0 का उपयोग कर रहा हूं!

वेब के समाधान से एकत्रित समाधान "अपडेट की हुई पंक्ति में डेटाफ्रेम पंक्ति को मैप करने का प्रयास करते समय एन्कोडर त्रुटि"

यहां अप्रत्याशित कुछ भी नहीं है आप कोड का उपयोग करने का प्रयास कर रहे हैं जो स्पार्क 1.x के साथ लिखा गया है और अब स्पार्क 2.0 में समर्थित नहीं है:

  • DataFrame.map में ((Row) ⇒ T)(ClassTag[T]) ⇒ RDD[T]
  • 2.x Dataset[Row].map है ((Row) ⇒ T)(Encoder[T]) ⇒ Dataset[T]

ईमानदार होने के लिए यह 1.x में बहुत अधिक अर्थ नहीं था। संस्करण का स्वतंत्र रूप से आप केवल DataFrame एपीआई का उपयोग कर सकते हैं:

 import org.apache.spark.sql.functions.{when, lower} val df = Seq( (2012, "Tesla", "S"), (1997, "Ford", "E350"), (2015, "Chevy", "Volt") ).toDF("year", "make", "model") df.withColumn("make", when(lower($"make") === "tesla", "S").otherwise($"make")) 

यदि आप वास्तव में map का उपयोग करना चाहते हैं, तो आपको स्थैतिक रूप से टाइप किए गए Dataset उपयोग करना चाहिए:

 import spark.implicits._ case class Record(year: Int, make: String, model: String) df.as[Record].map { case tesla if tesla.make.toLowerCase == "tesla" => tesla.copy(make = "S") case rec => rec } 

या कम से कम एक ऑब्जेक्ट वापस लौटाएगा जिसमें अन्तर्निर्मित एनकोडर होगा:

 df.map { case Row(year: Int, make: String, model: String) => (year, if(make.toLowerCase == "tesla") "S" else make, model) } 

अंत में यदि कुछ पूरी तरह से पागल कारणों से आप वास्तव में Dataset[Row] पर नक्शा चाहते हैं तो आपको आवश्यक एन्कोडर प्रदान करना होगा:

 import org.apache.spark.sql.catalyst.encoders.RowEncoder import org.apache.spark.sql.types._ import org.apache.spark.sql.Row // Yup, it would be possible to reuse df.schema here val schema = StructType(Seq( StructField("year", IntegerType), StructField("make", StringType), StructField("model", StringType) )) val encoder = RowEncoder(schema) df.map { case Row(year, make: String, model) if make.toLowerCase == "tesla" => Row(year, "S", model) case row => row } (encoder)