繁体   English   中英

在 Spark 和 Scala 中创建数据集时出现问题

[英]Problem creating dataset in Spark and Scala

我在使用 spark 数据集时遇到了一个问题:当我想用例 class 时,我不断收到关于编码器的异常,代码如下所示:

case class OrderDataType (orderId: String, customerId: String, orderDate: String)
import spark.implicits._

val ds = spark.read.option("header", "true").csv("data\\orders.csv").as[OrderDataType]

我在编译期间得到了这个异常:

找不到 OrderDataType 类型的编码器。 需要隐式 Encoder[OrderDataType] 将 OrderDataType 实例存储在数据集中。 通过导入 spark.implicits 支持原始类型(Int、String 等)和产品类型(案例类)。未来版本中将添加对序列化其他类型的支持。

我已经添加了这个: import spark.implicits._但它并没有解决问题!

根据 spark 和 scala 文档,编码必须使用 scala 隐式完成!

这段代码有什么问题,我应该怎么做才能修复它!

其他方式是...您可以使用object Orders extends App (足够智能,可以从 def main 外部识别案例 class)

mydata/Orders.csv

orderId,customerId,orderDate
1,2,21/08/1977
1,2,21/08/1978

示例代码:

package examples

import org.apache.log4j.Level
import org.apache.spark.sql._

object Orders extends App {
  val logger = org.apache.log4j.Logger.getLogger("org")
  logger.setLevel(Level.WARN)


  val spark = SparkSession.builder.appName(getClass.getName)
    .master("local[*]").getOrCreate


  case class OrderDataType(orderId: String, customerId: String, orderDate: String)

  import spark.implicits._

  val ds1 = spark.read.option("header", "true").csv("mydata/Orders.csv").as[OrderDataType]
  ds1.show
}

结果:

+-------+----------+----------+
|orderId|customerId| orderDate|
+-------+----------+----------+
|      1|         2|21/08/1977|
|      1|         2|21/08/1978|
+-------+----------+----------+

为什么将 class 放在 def main....

似乎这是由下面的注释@implicitNotFound中的Encoder设计的

main方法之外定义您的案例 class 然后在 main 方法中读取 csv 文件并转换为dataset

Example:

case class OrderDataType (orderId: String, customerId: String, orderDate: String)
  def main(args: Array[String]): Unit = {
val ds = spark.read.option("header", "true").csv("data\\orders.csv").as[OrderDataType]
}

//or

def main(args: Array[String]): Unit = {
    val ds = spark.read.option("header", "true").csv("data\\orders.csv").as[(String,String,String)]
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM