【问题标题】:Represent nested parameters for Neo4j query in Scala在 Scala 中表示 Neo4j 查询的嵌套参数
【发布时间】:2018-07-20 20:04:27
【问题描述】:

我尝试使用 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)

【问题讨论】:

    标签: scala apache-spark neo4j


    【解决方案1】:

    将这两个地图都转换为 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)
    

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 2021-01-14
      • 2019-06-12
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多