You can run this on spark shell

*CODE:*

        case class InstanceData(service: String, metric: String, zone:
String, source: String, time: Long, value: Double )

        val seq = sc.parallelize(Seq(
          InstanceData("serviceA", "metricA", "zoneA", "sourceA", 1000L,
1.0),
          InstanceData("serviceA", "metricA", "zoneA", "hostA", 1000L, 1.0),
          InstanceData("serviceD", "metricA", "zoneB", "hostB", 1000L, 2.0),
          InstanceData("serviceA", "metricF", "zoneA", "hostB", 1000L, 1.0)
        ))

        val instData =  spark.createDataFrame(seq)

        def makeMap = udf((service: String, metric: String, value: Double)
=> Map((service, metric) -> value))

        val instDF = instData.withColumn("metricMap", makeMap($"service",
$"metric", $"value"))

        def avgMapValueUDF = udf((newMap: Map[(String, String), Double],
count: Long) => {
          newMap.keys
            .map { keyTuple =>
              val sum = newMap.getOrElse(keyTuple, 0.0)
              (keyTuple, sum / count.toDouble)
            }.toMap
        })

        instDF.withColumn("customMap", avgMapValueUDF(col("metricMap"),
lit(1))).show



On Mon, Mar 26, 2018 at 11:51 PM, Shmuel Blitz <shmuel.bl...@similarweb.com>
wrote:

> Hi Nikhil,
>
> Can you please put a code snippet that reproduces the issue?
>
> Shmuel
>
> On Tue, Mar 27, 2018 at 12:55 AM, Nikhil Goyal <nownik...@gmail.com>
> wrote:
>
>>  |-- myMap: map (nullable = true)
>>  |    |-- key: struct
>>  |    |-- value: double (valueContainsNull = true)
>>  |    |    |-- _1: string (nullable = true)
>>  |    |    |-- _2: string (nullable = true)
>>  |-- count: long (nullable = true)
>>
>> On Mon, Mar 26, 2018 at 1:41 PM, Gauthier Feuillen <gauth...@dataroots.io
>> > wrote:
>>
>>> Can you give the output of “printSchema” ?
>>>
>>>
>>> On 26 Mar 2018, at 22:39, Nikhil Goyal <nownik...@gmail.com> wrote:
>>>
>>> Hi guys,
>>>
>>> I have a Map[(String, String), Double] as one of my columns. Using
>>>
>>> input.getAs[Map[(String, String), Double]](0)
>>>
>>>  throws exception: Caused by: java.lang.ClassCastException: 
>>> org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be 
>>> cast to scala.Tuple2
>>>
>>> Even the schema says that key is of type struct of (string, string).
>>>
>>> Any idea why this is happening?
>>>
>>>
>>> Thanks
>>>
>>> Nikhil
>>>
>>>
>>>
>>
>
>
> --
> Shmuel Blitz
> Big Data Developer
> Email: shmuel.bl...@similarweb.com
> www.similarweb.com
> <https://www.facebook.com/SimilarWeb/>
> <https://www.linkedin.com/company/429838/>
> <https://twitter.com/similarweb>
>

Reply via email to