Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 找不到匹配的方法:create for class com.google.api.services.bigquery.BigQueryImpl_Clojure_Google Bigquery - Fatal编程技术网

Clojure 找不到匹配的方法:create for class com.google.api.services.bigquery.BigQueryImpl

Clojure 找不到匹配的方法:create for class com.google.api.services.bigquery.BigQueryImpl,clojure,google-bigquery,Clojure,Google Bigquery,我目前在Clojure编写的后端工作。简而言之,我试图将一些数据存储到BigQuery中,但当我尝试创建数据集时,标题中报告的错误就会出现。下面是一些代码: 创建服务的方法: 创建数据集的方法: 我还尝试了BigQueryImpl中的其他方法,降低了库的级别,但结果是一样的 堆栈跟踪: java.lang.IllegalArgumentException: No matching method found: create for class com.google.cloud.bigque

我目前在Clojure编写的后端工作。简而言之,我试图将一些数据存储到BigQuery中,但当我尝试创建数据集时,标题中报告的错误就会出现。下面是一些代码:

  • 创建服务的方法:
  • 创建数据集的方法:
我还尝试了BigQueryImpl中的其他方法,降低了库的级别,但结果是一样的

堆栈跟踪:

java.lang.IllegalArgumentException: No matching method found: create for class com.google.cloud.bigquery.BigQueryImpl, compiling:(main.clj:172:24)
Exception in thread "main" java.lang.IllegalArgumentException: No matching method found: create for class com.google.cloud.bigquery.BigQueryImpl, compiling:(main.clj:172:24)
        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3657)
        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3651)
        at clojure.lang.Compiler.compile1(Compiler.java:7474)
        at clojure.lang.Compiler.compile(Compiler.java:7541)
        at clojure.lang.RT.compile(RT.java:406)
        at clojure.lang.RT.load(RT.java:451)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.core$load$fn__5677.invoke(core.clj:5893)
        at clojure.core$load.invokeStatic(core.clj:5892)
        at clojure.core$load.doInvoke(core.clj:5876)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5697)
        at clojure.core$compile$fn__5682.invoke(core.clj:5903)
        at clojure.core$compile.invokeStatic(core.clj:5903)
        at clojure.core$compile.invoke(core.clj:5895)
        at user$eval20$fn__29.invoke(form-init4156994521630280254.clj:1)
        at user$eval20.invokeStatic(form-init4156994521630280254.clj:1)
        at user$eval20.invoke(form-init4156994521630280254.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6927)
        at clojure.lang.Compiler.eval(Compiler.java:6917)
        at clojure.lang.Compiler.eval(Compiler.java:6917)
        at clojure.lang.Compiler.load(Compiler.java:7379)
        at clojure.lang.Compiler.loadFile(Compiler.java:7317)
        at clojure.main$load_script.invokeStatic(main.clj:275)
        at clojure.main$init_opt.invokeStatic(main.clj:277)
        at clojure.main$init_opt.invoke(main.clj:277)
        at clojure.main$initialize.invokeStatic(main.clj:308)
        at clojure.main$null_opt.invokeStatic(main.clj:342)
        at clojure.main$null_opt.invoke(main.clj:339)
        at clojure.main$main.invokeStatic(main.clj:421)
        at clojure.main$main.doInvoke(main.clj:384)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at clojure.lang.Var.invoke(Var.java:383)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.Var.applyTo(Var.java:700)
        at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: No matching method found: create for class com.google.cloud.bigquery.BigQueryImpl
        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:53)
        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28)
        at gc_webapp.persistence.gcs$create_dataset.invokeStatic(gcs.clj:177)
        at gc_webapp.persistence.gcs$create_dataset.invoke(gcs.clj:168)
        at clojure.lang.AFn.applyToHelper(AFn.java:154)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3652)
        ... 35 more
Compilation failed: Subprocess failed
我希望有人能帮助我。提前谢谢


PS:我是Clojure的初学者

如果你看一下BigQuery接口的文档,你会发现
create
方法实际上具有Java的可变签名思想:

Dataset     create(DatasetInfo datasetInfo, BigQuery.DatasetOption... options)
(.create bigquery dataset-info (into-array BigQuery$DatasetOption []))
这实际上是(在JVM级别)另一个必需的参数,由Java语言在调用站点自动填充。在Clojure中,必须显式提供它以匹配签名:

Dataset     create(DatasetInfo datasetInfo, BigQuery.DatasetOption... options)
(.create bigquery dataset-info (into-array BigQuery$DatasetOption []))
旁注:
def
始终创建全局定义。在非顶级的地方使用它几乎总是错误的。改用
let
和标准格式:

(defn create-dataset [dataset-name]
  "Given a name, it creates a dataset in BigQuery"
  (println "creating a dataset called: " dataset-name)
  (let [bigquery (create-service)
        dataset-info (.build (DatasetInfo/newBuilder dataset-name))]
    (.create bigquery dataset-info (into-array BigQuery$DatasetOption [])))

如果您查看BigQuery接口的文档,就会发现
create
方法实际上具有Java的可变签名思想:

Dataset     create(DatasetInfo datasetInfo, BigQuery.DatasetOption... options)
(.create bigquery dataset-info (into-array BigQuery$DatasetOption []))
这实际上是(在JVM级别)另一个必需的参数,由Java语言在调用站点自动填充。在Clojure中,必须显式提供它以匹配签名:

Dataset     create(DatasetInfo datasetInfo, BigQuery.DatasetOption... options)
(.create bigquery dataset-info (into-array BigQuery$DatasetOption []))
旁注:
def
始终创建全局定义。在非顶级的地方使用它几乎总是错误的。改用
let
和标准格式:

(defn create-dataset [dataset-name]
  "Given a name, it creates a dataset in BigQuery"
  (println "creating a dataset called: " dataset-name)
  (let [bigquery (create-service)
        dataset-info (.build (DatasetInfo/newBuilder dataset-name))]
    (.create bigquery dataset-info (into-array BigQuery$DatasetOption [])))

你好谢谢你的解释。但是现在,当我从
BigQuery/DatasetOption
调用DatasetOption时,由于DatasetOption是BigQuery中的一个静态类,我发现
无法在接口com.google.cloud.BigQuery.BigQuery
中找到静态字段:DatasetOption是的,对不起。引用静态内部类时使用它们的真实名称,这里是
BigQuery$DatasetOption
。我来编辑。嗨!谢谢你的解释。但是现在,当我从
BigQuery/DatasetOption
调用DatasetOption时,由于DatasetOption是BigQuery中的一个静态类,我发现
无法在接口com.google.cloud.BigQuery.BigQuery
中找到静态字段:DatasetOption是的,对不起。引用静态内部类时使用它们的真实名称,这里是
BigQuery$DatasetOption
。我来编辑。