Hello Folks, I am trying to chain a couple of map operations and it seems the second map fails with a mismatch in arguments(event though the compiler prints them to be the same.) I checked the function and variable types using :t and they look ok to me.
Have you seen this earlier? I am posting the code, data and output below. Any pointers will be greatly appreciated. Thanks, Boromir. /////////////////////// SCRIPT val data = sc.textFile("data/testpv.csv") case class KVV(key: String, valvec: Array[Double]) def mapToKV(line: String) : KVV = { val splits = line.split(",") val key = splits(0).trim val valvec = splits.drop(1).map(x => x.trim.toDouble) val kvv = KVV(key, valvec) return kvv } val kvs = data.map(line => mapToKV(line)) def mapKVtoKVL(kvv: KVV) : KVV = { return kvv } val tvar = kvs.map(x => mapKVtoKVL(x)) /////////////////////// SAMPLE DATA in testpv.csv x,1.1,1.2,1.3 y,2.1,2.2,2.3 /////////////////////// REPL OUTPUT scala> val data = sc.textFile("data/testpv.csv") 14/09/15 10:53:23 INFO MemoryStore: ensureFreeSpace(146579) called with curMem=0, maxMem=308713881 14/09/15 10:53:23 INFO MemoryStore: Block broadcast_0 stored as values to memory (estimated size 143.1 KB, free 294.3 MB) data: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12 scala> case class KVV(key: String, valvec: Array[Double]) defined class KVV scala> scala> def mapToKV(line: String) : KVV = { | val splits = line.split(",") | val key = splits(0).trim | val valvec = splits.drop(1).map(x => x.trim.toDouble) | | val kvv = KVV(key, valvec) | return kvv | } mapToKV: (line: String)KVV scala> val kvs = data.map(line => mapToKV(line)) kvs: org.apache.spark.rdd.RDD[KVV] = MappedRDD[2] at map at <console>:18 scala> scala> def mapKVtoKVL(kvv: KVV) : KVV = { | return kvv | } mapKVtoKVL: (kvv: KVV)KVV scala> val tvar = kvs.map(x => mapKVtoKVL(x)) <console>:22: error: type mismatch; found : KVV required: KVV val tvar = kvs.map(x => mapKVtoKVL(x)) ^