Spark 数据集编码器:kryo() 与 bean()

2024-04-25

在 Spark 中处理数据集时,我们需要指定编码器来序列化和反序列化对象。我们可以选择使用Encoders.bean(Class<T>) or Encoders.kryo(Class<T>).

它们有何不同?使用其中一种与另一种相比对性能有何影响?


出于多种原因,始终建议使用 Kryo 序列化到 Java 序列化。其中一些如下。

  • Kryo 序列化比 Java 序列化更快。
  • Kryo 序列化使用更少的内存占用,尤其是在您可能需要的情况下Cache() and Persist()。这在以下阶段非常有帮助:Shuffling.
  • 尽管 Kryo 支持缓存和混洗,但在磁盘持久化期间不支持。
  • saveAsObjectFile在 RDD 上和objectFile方法上SparkContext仅支持java序列化。
  • 您在数据集中处理的自定义数据类型越多,处理它们的复杂性就越高。因此,使用像 Kryo 这样的统一序列化通常是最佳实践。
  • Java 的序列化框架是出了名的低效,它消耗太多的 CPU、RAM 和大小,无法成为合适的大规模序列化​​格式。
  • Java 序列化在序列化对象时需要存储完全限定的类名。但是,Kryo 可以通过保存/注册类来避免这种情况sparkConf.registerKryoClasses(Array( classOf[A], classOf[B], ...)) or sparkConf.set("spark.kryo.registrator", "MyKryoRegistrator")。这节省了大量空间并避免了不必要的元数据。

之间的区别bean() and javaSerialization()java序列化是序列化类型的对象T使用通用的java序列化。该编码器映射T转换为单字节数组(二进制)字段。其中 as bean 为 Java Bean 类型创建编码器T。它们都使用 Java 序列化,唯一的区别是它们如何将对象表示为字节。

引用自文档

JavaSerialization 效率极低,只能用作 最后一招。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 数据集编码器:kryo() 与 bean() 的相关文章

  • Spark Dataframe 列可为 null 的属性更改

    我想更改 Spark Dataframe 中特定列的可为空属性 如果我当前打印数据框的模式 它看起来如下所示 col1 string nullable false col2 string nullable true col3 string
  • 使用 Spark collectionAccumulator 时出现 ConcurrentModificationException

    我尝试在 Azure HDInsight 按需群集上运行基于 Spark 的应用程序 并且看到记录了大量 SparkException 由 ConcurrentModificationException 引起 当我启动本地 Spark 实例
  • Spark parquet 分区:大量文件

    我正在尝试利用 Spark 分区 我试图做类似的事情 data write partitionBy key parquet location 这里的问题是每个分区都会创建大量镶木地板文件 如果我尝试从根目录读取 则会导致读取速度变慢 为了避
  • Spark scala - 按数组列分组[重复]

    这个问题在这里已经有答案了 我对 Spark Scala 很陌生 感谢你的帮助 我有一个数据框 val df Seq a a1 Array x1 x2 a b1 Array x1 a c1 Array x2 c c3 Array x2 a
  • TaskSchedulerImpl:初始作业尚未接受任何资源;

    这就是我正在尝试做的事情 我创建了DataStax企业集群的两个节点 在其上创建了一个java程序来获取一张表 Cassandra数据库表 的计数 该程序是在 eclipse 中构建的 实际上是来自 windows 盒子 从 Windows
  • 参数为动态的 Spark 滞后函数

    我需要在spark中实现lag函数 我可以像下面这样做 使用 hive temp Spark 表中的一些数据 假设 DF 有这些行 lagno value 0 100 0 200 2 null 3 null 其中第一列是您要使用的实际滞后数
  • 在Spark的客户端模式下,驱动程序需要网络访问远程执行程序?

    使用火花时在客户端模式 例如yarn client 运行驱动程序的本地计算机是否直接与运行远程执行程序的集群工作节点通信 如果是 是否意味着机器 运行驱动程序 需要具有对工作节点的网络访问权限 那么master节点向集群请求资源 并将wor
  • scala.collection.Seq 不适用于 Java

    Using 阿帕奇火花2 0 1 Java 7 在 Apache Spark Java API 文档中 DataSet 类出现了一个example http spark apache org docs latest api java org
  • Spark:有没有办法打印出spark-shell和spark的类路径?

    我可以在 Spark shell 中成功运行 Spark 作业 但是当它打包并通过 Spark submit 运行时 我收到 NoSuchMethodError 这向我表明类路径存在某种不匹配 有没有办法可以比较两个类路径 某种日志记录语句
  • 如何使用 Spark 执行插入覆盖?

    我正在尝试将我们的 ETL Hive 脚本之一转换为 Spark 其中 Hive ETL 脚本维护一个表 其中需要在每晚新同步之前删除部分数据 Hive ETL 使用插入覆盖的方式将主表删除超过 3 天的数据 基本上创建一个临时表 其中的数
  • 将案例类传递给函数参数

    抱歉问了一个简单的问题 我想将案例类传递给函数参数 并且想在函数内部进一步使用它 到目前为止我已经尝试过这个TypeTag and ClassTag但由于某种原因 我无法正确使用它 或者可能是我没有看到正确的位置 用例与此类似 case c
  • 在 Spark 中分发 scikit learn 分类器的推荐方法是什么?

    我已经使用 scikit learn 构建了一个分类器 现在我想使用 Spark 在大型数据集上运行 Predict proba 我目前使用以下方法对分类器进行腌制 import pickle pickle dump clf open cl
  • 如何在 Spark 中创建空数据帧

    我有一组基于 Avro 的配置单元表 我需要从中读取数据 由于Spark SQL使用hive serdes从HDFS读取数据 因此比直接读取HDFS慢很多 因此 我使用数据块 Spark Avro jar 从底层 HDFS 目录读取 Avr
  • 如何使用 Apache Livy 设置 Spark 配置属性?

    我不知道在向 Apache Livy 提交 Spark 作业时如何以编程方式传递 SparkSession 参数 这是测试 Spark 作业 class Test extends Job Int override def call jc J
  • Spark:Aggregator和UDAF有什么区别?

    在Spark的文档中 Aggregator 抽象类聚合器 IN BUF OUT 扩展可序列化 用户定义聚合的基类 可以是 在数据集操作中用于获取组中的所有元素并 将它们减少到单个值 用户定义的聚合函数是 抽象类 UserDefinedAgg
  • Spark SQL / PySpark 中的逆透视

    我手头有一个问题陈述 其中我想在 Spark SQL PySpark 中取消透视表 我已经浏览了文档 我可以看到仅支持pivot 但到目前为止还不支持取消透视 有什么方法可以实现这个目标吗 让我的初始表如下所示 When I pivotPy
  • Python Spark DataFrame:用 SparseVector 替换 null

    在 Spark 中 我有以下名为 df 的数据框 其中包含一些空条目 id features1 features2 185 5 0 1 4 0 1 0 null 220 5 0 2 3 0 1 0 10 1 2 6 0 1 225 null
  • 如何更改 SparkContext.sparkUser() 设置(在 pyspark 中)?

    我是新来的Spark and pyspark 我使用 pyspark 之后我rdd处理中 我试图将其保存到hdfs使用saveAsTextfile 功能 但我得到一个 没有权限 错误消息 因为 pyspark 尝试写入hdfs使用我的本地帐
  • Spark 执行器 STDOUT 到 Kubernetes STDOUT

    我在 Spark Worker 中运行的 Spark 应用程序将执行程序日志输出到特定文件路径 worker home directory app xxxxxxxx 0 stdout I used log4j properties将日志从
  • 如何在 Mac 上使用 homebrew 安装 apache-spark 2.3.3

    brew install apache spark只安装最新版本的 Spark 2 4 和 brew search apache spark没有给出任何其他选项 有没有办法用自制程序安装旧版本的 Spark Type brew tap ed

随机推荐