Есть ли простой способ преобразования заданного объекта Row в json?Как преобразовать строку в json в Spark 2 Scala
Нашел о преобразовании всей Dataframe к выходу JSon: Spark Row to JSON
Но я просто хочу, чтобы преобразовать одну строку в формате JSON. Вот псевдокод для того, что я пытаюсь сделать.
Точнее, я читаю json как входной сигнал в Dataframe. Я создаю новый вывод, который в основном основан на столбцах, но с одним полем json для всей информации, которая не вписывается в столбцы.
Мой вопрос, что это самый простой способ, чтобы написать эту функцию: 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)
})
}
Решения Psidom в:
def convertRowToJSON(row: Row): String = {
val m = row.getValuesMap(row.schema.fieldNames)
JSONObject(m).toString()
}
работает только если строка имеет только один уровень не с вложенной Row. Это схема:
StructType(
StructField(indicator,StringType,true),
StructField(range,
StructType(
StructField(currency_code,StringType,true),
StructField(maxrate,LongType,true),
StructField(minrate,LongType,true)),true))
Также попробовал Артем предложение, но это не компилировать:
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
}
Спасибо за ваше предложение. Я попытался подойти к вам: четкости row2DataFrame (строка: Строка, sqlContext: SQLContext): DataFrame = { вал sparkContext = sqlContext.sparkContext импорта sparkContext._ импорта sqlContext.implicits._ импорта sqlContext._ VAL rowRDD: РДД [строка] = sqlContext.sparkContext.makeRDD (строка :: Ноль) вал dataFrame = rowRDD.toDF() // XXX не компилируется dataFrame } Это не компилировать. –