表示Scala中Neo4j查询的嵌套参数

时间:2018-07-19 12:49:04

标签: scala apache-spark neo4j

我试图用Map [String,Anyref]的形式运行带有参数的Neo4j查询,效果很好。但是,我想以批处理的形式将数据发送到Neo4j,因此如果转换了数据,结果将是Map [String,Map [String,AnyRef]]或Map [String,AnyRef]。但总的来说,我想通过以下方式设置数据:

{
  "nodes": [
    {
      "id": 193331567,
      "lat": 40.7599983215332,
      "lon": -73.98999786376953
    },
    {
      "id": 173062762,
      "lat": 41.959999084472656,
      "lon": -87.66000366210938
    },
    {
      "id": 66276172,
      "lat": 40.72999954223633,
      "lon": -74.01000213623047
    }
  ]
}

我使用嵌套映射在Scala中编写了它,但是,当我将此嵌套映射作为参数传递给查询时,Neo4j无法呈现它。那么,如何在Scala中表示这种嵌套的JSON结构?我应该使用and Object还是类似的东西?

这是我设置的地图:

val paramsList = Map("nodes" -> {
    data map { seq =>
      Map(
        "lat" -> seq(1).toDouble.asInstanceOf[AnyRef],
        "lon" -> seq(2).toDouble.asInstanceOf[AnyRef],
        "id" -> seq(0).toInt.asInstanceOf[AnyRef]
      )
    }}.asInstanceOf[AnyRef])

val queryResults = neo4jSession.run(neo4jQuery, params.asJava)

1 个答案:

答案 0 :(得分:0)

将两个映射都转换为java.util.Map非常重要,这样Neo4j才能将这些数据作为参数传递。

val paramsList = data map { seq =>
          Map(
            "lat" -> seq(1).toDouble.asInstanceOf[AnyRef],
            "lon" -> seq(2).toDouble.asInstanceOf[AnyRef],
            "id" -> seq(0).toInt.asInstanceOf[AnyRef]
          ).asJava.asInstanceOf[AnyRef]
        }
    val queryResults = neo4jSession.run(neo4jQueries.searchQueryWithBatchParams, Map("nodes" -> paramsList.asJava.asInstanceOf[AnyRef]).asJava)