4Manuals

  • PDF Cloud HOME

找不到匹配的方法:为com.google.api.services.bigquery.BigQueryImpl类创建 Download

    在jupyter上使用pandas_gbq时删除所有日志 如何通过Java在BigQuery中创建分区表? 如何一次从文件中读取一行文本,并将文本分配给Clojure中的变量 为什么带有副作用的Clojure xform的行为不符合预期?

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

  • 创建服务的方法:
(defn create-service []
  (.getService (BigQueryOptions/getDefaultInstance)))
  • 创建数据集的方法:
(defn create-dataset [dataset-name]
      "Given a name, it creates a dataset in BigQuery"
       (println "creating a dataset called: " dataset-name)
       (def bigquery (create-service))
       (def dataset-info (.build (DatasetInfo/newBuilder dataset-name)))
       (.create bigquery dataset-info)
  )

我还尝试了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的初学者

1 个答案:

答案 0 :(得分:3)

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

Dataset     create(DatasetInfo datasetInfo, BigQuery.DatasetOption... options)

这实际上是(在JVM级别上)另一个必需的参数,该参数由调用站点的Java 语言自动填充。在Clojure中,您必须明确提供它以匹配签名:

(.create bigquery dataset-info (into-array 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 DatasetOption [])))



Similar searches
    Samsung RF266AFBP Refrigerator User Manual Spring Boot-从SQL到NoSQL 如何在react图表上的datakey中操作DateTime 当列名称为整数时索引pandas数据框 如何将自定义设置传递给Elasticsearch批量API?