/ / Scala JSON zu DenseMatrix - json, scala, apache-spark, scala-breeze

Scala JSON zu DenseMatrix - Json, Scala, Apache-Funke, Scala-Brise

Ich versuche, diese JSON-Antwort zu konvertieren:

[
{
"metric":"energy.salted",
"tags":{
"sensor":"0",
"unit":"101"
},
"aggregateTags":[

],
"dps":{
"1477958400":1.9519165754318237,
"1477958401":-0.4030894637107849,
"1477958402":0.6892277598381042,
"1477958403":3.0232467651367188,
"1477958404":0.07003471255302429,
"1477958405":2.305912971496582
}
},
{
"metric":"energy.salted",
"tags":{
"sensor":"1",
"unit":"101"
},
"aggregateTags":[

],
"dps":{
"1477958400":4.979776382446289,
"1477958401":1.8036608695983887,
"1477958402":3.0569913387298584,
"1477958403":0.8318896889686584,
"1477958404":-0.3151852488517761,
"1477958405":2.563884735107422
}
}
]

In eine DenseMatrix der Werte, die den "dps" -Schlüsseln zugeordnet sind. Die endgültige DenseMatrix sollte folgendermaßen aussehen:

[
[1.9519165754318237, -0.4030894637107849, 0.6892277598381042, 3.0232467651367188, 0.07003471255302429, 2.305912971496582],
[4.979776382446289, 1.8036608695983887, 3.0569913387298584, 0.8318896889686584, -0.3151852488517761, 2.563884735107422]
]

Ich habe den JSON mit play.api.libs.json.JSON analysiert und kann die "dps" -Werte sogar extrahieren mit:

jsonResponse = Json.parse(response.body)
for (i <- 0 until numSensors) {
dataMap = (jsonResponse.apply(i)  "dps")
}

Aber wie konvertiere ich es in eine dichte Matrix mit dem obigen Format?

Antworten:

1 für die Antwort № 1

Angenommen, Sie haben für alle dieselben Schlüssel dpskönnen Sie dies versuchen, eine leere DenseMatrix erstellen und jedes Array mit an die Matrix binden DenseMatrix.vertcat:

val keys = List("1477958400", "1477958401", "1477958402", "1477958403", "1477958404", "1477958405")

var mat = new DenseMatrix[Double](0, 6, Array.empty[Double])

for (i <- 0 until numSensors) {

val dataMap = (jsonResponse.apply(i)  "dps")
val array = keys.map(key => (dataMap  key).as[Double]).toArray

mat = DenseMatrix.vertcat(mat, new DenseMatrix[Double](1, 6, array))
}

mat

//breeze.linalg.DenseMatrix[Double] = 1.9519165754318237  -0.4030894637107849  0.6892277598381042  ... (6 total)
//                                    4.979776382446289   1.8036608695983887   3.0569913387298584  ...