N1QL 查询将 databricks spark 1.6 连接到 couchbase server 4.5

N1QL Query to connect databricks spark 1.6 to couchbase server 4.5

我正在尝试建立从 Databricks 到 couchbase server 4.5 的连接,然后 运行 N1QL 查询。

下面的 scala 代码将 return 1 条记录,但在引入 N1QL 时失败。感谢任何帮助。

    import com.couchbase.client.java.CouchbaseCluster;
    import scala.collection.JavaConversions._;

    import com.couchbase.client.java.query.Select.select;
    import com.couchbase.client.java.query.dsl.Expression;
    import com.couchbase.client.java.query.Query



    // Connect to a cluster on localhost
    val cluster = CouchbaseCluster.create("http://**************")

    // Open the default bucket
    val bucket = cluster.openBucket("travel-sample", "password");

    // Read it back out
    //val streamsense = bucket.get("airline_1004546") - Works and returns one record


  // Create a DataFrame with schema inference
    val ev = sql.read.couchbase(schemaFilter = EqualTo("type", "airline"))

    //Show the inferred schema
     ev.printSchema()

    //query using the data frame
    ev
      .select("id", "type")
      .show(10)


    //issue sql query for the same data (N1ql)
    val query = "SELECT type, meta().id  FROM `travel-sample` LIMIT 10"
    sc
      .couchbaseQuery(N1qlQuery.simple(query))
      .collect()
      .foreach(println)

您在 N1QL 查询中有语法错误。你有:

val query = "SELECT type, id  FROM `travel-sample` WHERE LIMIT 10"

您需要删除 WHERE,或添加条件。

您还需要将 id 更改为 META().id。

在 Databricks(以及通常任何交互式 Spark 云环境)中,您无需定义集群节点、存储桶或 sc 变量,而是需要设置 Spark 的配置设置,以便在设置 Databricks 集群时使用。使用高级设置选项,如下所示。

我只在 spark2.0 中使用过这种方法,所以你的情况可能会有所不同。

您也可以删除集群和存储桶变量初始化。