Clojure 找不到匹配的方法:create for class com.google.api.services.bigquery.BigQueryImpl
我目前在Clojure编写的后端工作。简而言之,我试图将一些数据存储到BigQuery中,但当我尝试创建数据集时,标题中报告的错误就会出现。下面是一些代码: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
- 创建服务的方法:
- 创建数据集的方法:
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
。我来编辑。