Search code examples
scalaapache-spark

How to read json column with dot in it in scala?


I want to read json a column which has dot(.) in it. Below code works fine it there is no dot.

val data = """{
"abc.id": [{
    "id": "123",
    "name": "UNKNOWN"
}]}""";

   
val inputdata = spark.sparkContext.parallelize(data :: Nil);
val inputDF = spark.read.json(inputdata);
inputDF.show();
inputDF.select(inputDF.columns.map(c => col(c)(0).as(c)): _*).show()

Solution

  • Use backtick (`) when you have special characters in columns.

    val data = """{
    "abc.id": [{
        "id": "123",
        "name": "UNKNOWN"
    }]}"""
    
    val inputdata = Seq(data).toDS
    
    val df = spark.read.json(inputdata);
    
    df
    .select(inputDF.columns.map(c => col(s"`${c}`")(0).as(c)):_*)
    .show(false)
    
    +--------------+
    |abc.id        |
    +--------------+
    |{123, UNKNOWN}|
    +--------------+