Cómo convertir Row a json en Spark 2 Scala

¿Hay una manera simple de convertir un objeto Row dado a json?

Encontré esto acerca de convertir un Dataframe completo a salida json:Spark Row a JSON

Pero solo quiero convertir una fila a json. Aquí hay un pseudocódigo para lo que estoy tratando de hacer.

Más precisamente, estoy leyendo json como entrada en un Dataframe. Estoy produciendo una nueva salida que se basa principalmente en columnas, pero con un campo json para toda la información que no cabe en las columnas.

Mi pregunta cuál es la forma más fácil de escribir esta función: convertRowToJson ()

def convertRowToJson(row: Row): String = ???

def transformVenueTry(row: Row): Try[Venue] = {
  Try({
    val name = row.getString(row.fieldIndex("name"))
    val metadataRow = row.getStruct(row.fieldIndex("meta"))
    val score: Double = calcScore(row)
    val combinedRow: Row = metadataRow ++ ("score" -> score)
    val jsonString: String = convertRowToJson(combinedRow)
    Venue(name = name, json = jsonString)
  })
}

Soluciones de Psidom:

def convertRowToJSON(row: Row): String = {
    val m = row.getValuesMap(row.schema.fieldNames)
    JSONObject(m).toString()
}

solo funciona si la fila solo tiene un nivel que no tiene una fila anidada. Este es el esquema:

StructType(
    StructField(indicator,StringType,true),   
    StructField(range,
    StructType(
        StructField(currency_code,StringType,true),
        StructField(maxrate,LongType,true), 
        StructField(minrate,LongType,true)),true))

También probé la sugerencia de Artem, pero eso no compiló:

def row2DataFrame(row: Row, sqlContext: SQLContext): DataFrame = {
  val sparkContext = sqlContext.sparkContext
  import sparkContext._
  import sqlContext.implicits._
  import sqlContext._
  val rowRDD: RDD[Row] = sqlContext.sparkContext.makeRDD(row :: Nil)
  val dataFrame = rowRDD.toDF() //XXX does not compile
  dataFrame
}

Respuestas a la pregunta(7)

Su respuesta a la pregunta