Clojure - 使用 Flambo 时未在 DataFrame 中找到 select 方法的匹配方法
Clojure - No matching method found for select method in DataFrame when using Flambo
我正在使用包含给定列名的 Flambo to work with Spark. I want to retrieve a DataFrame。我写了一个简单的函数如下:
(defn make-dataset
([data-path column-names and-another]
(let [data (sql/read-csv sql-context data-path)
cols (map #(.col data %) column-names)]
(.select data (Column. "C0")))))
当我执行它时出现以下异常。
IllegalArgumentException No matching method found: select for class org.apache.spark.sql.DataFrame clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
我做错了什么?为什么 col.
有效而 select.
无效,因为它们都可以从同一个 Class 获得?
如果我错了,请帮助我?
DataFrame.select
您尝试呼叫的签名如下:
def select(cols: Column*): DataFrame
如您所见,它接受 Column
的可变参数,而您为它提供了一个与签名不匹配的裸 Column
值,因此是例外。 Scala 的可变参数封装在 scala.collection.Seq
中。您可以使用以下代码将您的专栏包装成实现 Seq
的内容:
(scala.collection.JavaConversions/asScalaBuffer [(Column. "C0")])
在 Clojure 中,使用数组传递给可变参数字段。当我使用字符串和字符串数组在数据帧上调用 select 函数时,我遇到了同样的问题。
类似于
(def cols-vec ["a","b","c])
(defn covert->spark-cols [columns] (into [] (map #(Column. %) columns))
我们被 java api 在收集方面的工作方式所愚弄...
当方法签名说 ... java 可以使用一个值,因为 Clojure 需要一个集合。
我正在使用包含给定列名的 Flambo to work with Spark. I want to retrieve a DataFrame。我写了一个简单的函数如下:
(defn make-dataset
([data-path column-names and-another]
(let [data (sql/read-csv sql-context data-path)
cols (map #(.col data %) column-names)]
(.select data (Column. "C0")))))
当我执行它时出现以下异常。
IllegalArgumentException No matching method found: select for class org.apache.spark.sql.DataFrame clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
我做错了什么?为什么 col.
有效而 select.
无效,因为它们都可以从同一个 Class 获得?
如果我错了,请帮助我?
DataFrame.select
您尝试呼叫的签名如下:
def select(cols: Column*): DataFrame
如您所见,它接受 Column
的可变参数,而您为它提供了一个与签名不匹配的裸 Column
值,因此是例外。 Scala 的可变参数封装在 scala.collection.Seq
中。您可以使用以下代码将您的专栏包装成实现 Seq
的内容:
(scala.collection.JavaConversions/asScalaBuffer [(Column. "C0")])
在 Clojure 中,使用数组传递给可变参数字段。当我使用字符串和字符串数组在数据帧上调用 select 函数时,我遇到了同样的问题。
类似于
(def cols-vec ["a","b","c])
(defn covert->spark-cols [columns] (into [] (map #(Column. %) columns))
我们被 java api 在收集方面的工作方式所愚弄... 当方法签名说 ... java 可以使用一个值,因为 Clojure 需要一个集合。