Zeppelin ノートブックで Spark を使用していますが、groupByKey() が機能していないようです。
このコード:
df.groupByKey(row => row.getLong(0))
.mapGroups((key, iterable) => println(key))
このエラーが表示されます (おそらく、コンパイル エラーです。作業中のデータセットがかなり大きいため、すぐに表示されるためです)。
error: Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases.
ケースクラスを追加して、すべての行をそれにマップしようとしましたが、それでも同じエラーが発生しました
import spark.implicits._
case class DFRow(profileId: Long, jobId: String, state: String)
def getDFRow(row: Row):DFRow = {
return DFRow(row.getLong(row.fieldIndex("item0")),
row.getString(row.fieldIndex("item1")),
row.getString(row.fieldIndex("item2")))
}
df.map(DFRow(_))
.groupByKey(row => row.getLong(0))
.mapGroups((key, iterable) => println(key))
私のデータフレームのスキーマは次のとおりです。
root
|-- item0: long (nullable = true)
|-- item1: string (nullable = true)
|-- item2: string (nullable = true)