Spark 2.2.0 数据集中的输出格式不可读
Posted
技术标签:
【中文标题】Spark 2.2.0 数据集中的输出格式不可读【英文标题】:Output not in readable format in Spark 2.2.0 Dataset 【发布时间】:2017-12-28 02:10:59 【问题描述】:以下是我尝试在 intellij IDE 上使用 spark2.2.0 执行的代码。但我得到的输出不是可读格式。
val spark = SparkSession
.builder()
.appName("Spark SQL basic example").master("local[2]")
.getOrCreate()
// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._
import scala.reflect.ClassTag
implicit def kryoEncoder[A](implicit ct: ClassTag[A]) =
org.apache.spark.sql.Encoders.kryo[A](ct)
case class Person(name: String, age: Long)
// Encoders are created for case classes
val caseClassDS = Seq(Person("Andy", 32)).toDS()
caseClassDS.show()
输出显示:
+--------------------+
| value|
+--------------------+
|[01 00 44 61 74 6...|
+--------------------+
如果我在这里遗漏了什么,谁能解释一下?
谢谢
【问题讨论】:
【参考方案1】:这是因为您使用的是 Kryo Encoder
,它并非旨在反序列化 show
的对象。
一般来说,当有更精确的Encoders
可用时,您永远不应该使用 Kryo Encoder
。它的性能较差,功能较少。而是使用Product
Encoder
spark.createDataset(Seq(Person("Andy", 32)))(Encoders.product[Person])
【讨论】:
谢谢,但这似乎对我不起作用。将 val caseClassDS = spark.createDataset(Seq(Person("Andy", 32)))(Encoders.product[Person]) 添加到我的代码中会出现异常: 谢谢,但这似乎对我不起作用。将 val caseClassDS = spark.createDataset(Seq(Person("Andy", 32)))(Encoders.product[Person]) 添加到我的代码中会出现异常:错误:(24, 84) 没有 TypeTag 可用于 Person val caseClassDS = spark.createDataset(Seq(Person("Andy", 32)))(Encoders.product[Person]) 您能从implicit def kryoEncoder[
中删除implicit
并重新开始吗?或者完全删除implicit def kryoEncoder
。以上是关于Spark 2.2.0 数据集中的输出格式不可读的主要内容,如果未能解决你的问题,请参考以下文章