私は次のクラスを持っています。run
は、データベーステーブルからintのリストを返します。データフレームを強力な型付きデータセットに変換しますか?
class ItemList(sqlContext: org.apache.spark.sql.SQLContext, jdbcSqlConn: String) {
def run(date: LocalDate) = {
sqlContext.read.format("jdbc").options(Map(
"driver" -> "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"url" -> jdbcSqlConn,
"dbtable" -> s"dbo.GetList('$date')"
)).load()
}
}
次のコード
val conf = new SparkConf()
val sc = new SparkContext(conf.setAppName("Test").setMaster("local[*]"))
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val itemListJob = new ItemList(sqlContext, jdbcSqlConn)
val processed = itemListJob.run(rc, priority).select("id").map(d => {
runJob.run(d) // d expected to be int
})
processed.saveAsTextFile("c:\\temp\\mpa")
は
[error] ...\src\main\scala\main.scala:39: type mismatch; [error] found : org.apache.spark.sql.Row [error] required: Int [error] runJob.run(d) [error] ^ [error] one error found [error] (compile:compileIncremental) Compilation failed
のエラーを取得する私は
val processed = itemListJob.run(rc, priority).select("id").as[Int].map(d =>
- を試してみました
人とも
データセットに保存されているタイプのためのエンコーダを見つけることができませんのエラーを得ました。 spark.implicits._をインポートすることで、プリミティブ型(Int、Stringなど)とProduct型(ケースクラス)がサポートされます。他の型をシリアル化するためのサポートは、将来のリリースで追加されます。
更新: 私は
import sc.implicits._
輸入暗黙のステートメントを追加しようとしているが値の暗黙の誤差がorg.apache.sparkのメンバーではありませんです.SparkContext
import sqlContext.implicits._
は問題ありません。しかしながら、processed.saveAsTextFile("c:\\temp\\mpa")
の後の文は
値saveAsTextFileの誤差がorg.apache.spark.sql.Dataset [(INT、java.time.LocalDate)]のメンバーではない持って
select("id").as[Int]
あなたがに
Rows
を変換するための暗黙をインポートする必要があります。次のようにあなたが単にあることをselect("id")
の行を変更する必要があり
as [Int]を使用しているときのエラーは何ですか? – zsxwing
エラーは 'データセットに格納された型のエンコーダを見つけることができません。 ' – ca9163d9
あなたは' import spark.implicits._'を試してみましたか?他のタイプをシリアライズするためのサポートは、将来のリリースで追加されます。 ? – zsxwing