में बदल रहे हैं मैं स्पार्क में udf में एक स्ट्रक्चर पास करने की कोशिश कर रहा हूं। यह फ़ील्ड नाम बदल रहा है और कॉलम स्थिति में नाम बदल रहा है। मैं इसे कैसे ठीक करूं?स्पार्क स्ट्रक्चर स्ट्रक्चरफील्ड नाम यूडीएफ
object TestCSV {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("localTest").setMaster("local")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val inputData = sqlContext.read.format("com.databricks.spark.csv")
.option("delimiter","|")
.option("header", "true")
.load("test.csv")
inputData.printSchema()
inputData.show()
val groupedData = inputData.withColumn("name",struct(inputData("firstname"),inputData("lastname")))
val udfApply = groupedData.withColumn("newName",processName(groupedData("name")))
udfApply.show()
}
def processName = udf((input:Row) =>{
println(input)
println(input.schema)
Map("firstName" -> input.getAs[String]("firstname"), "lastName" -> input.getAs[String]("lastname"))
})
}
आउटपुट:
root
|-- id: string (nullable = true)
|-- firstname: string (nullable = true)
|-- lastname: string (nullable = true)
+---+---------+--------+
| id|firstname|lastname|
+---+---------+--------+
| 1| jack| reacher|
| 2| john| Doe|
+---+---------+--------+
त्रुटि:
[jack,reacher] StructType(StructField(i[1],StringType,true), > StructField(i[2],StringType,true)) 17/03/08 09:45:35 ERROR Executor: Exception in task 0.0 in stage 2.0 (TID 2) java.lang.IllegalArgumentException: Field "firstname" does not exist.
आप दो स्ट्रिंग्स ('स्ट्रिंग्स 'के रूप में सीधे udf में क्यों नहीं पारित करते हैं? –
यह संभव है लेकिन आप स्पार्क यूडीएफ में तर्क के रूप में 10 से अधिक फ़ील्ड पास नहीं कर सकते हैं। यहां मैंने जो एक प्रदान किया है वह एक सरल उपयोग केस है। कभी-कभी मुझे यूडीएफ में 20 से अधिक कॉलम पास करना पड़ता है। मैं इसे कैसे प्राप्त करूं? – hp2326