gpt4 book ai didi

apache-spark - Cryo 对 Spark SQL 有帮助吗?

转载 作者:行者123 更新时间:2023-12-04 05:26:31 25 4
gpt4 key购买 nike

Kryo 通过高效的序列化方法帮助提高 Spark 应用程序的性能。
我想知道 Kryo 是否会在 SparkSQL 的情况下提供帮助,我应该如何使用它。
在 SparkSQL 应用程序中,我们会做很多基于列的操作,比如 df.select($"c1", $"c2") ,并且 DataFrame Row 的架构不是完全静态的。
不确定如何为用例注册一个或多个序列化程序类。

例如:

case class Info(name: String, address: String)
...
val df = spark.sparkContext.textFile(args(0))
.map(_.split(','))
.filter(_.length >= 2)
.map {e => Info(e(0), e(1))}
.toDF
df.select($"name") ... // followed by subsequent analysis
df.select($"address") ... // followed by subsequent analysis

我认为为每个 select 定义案例类不是一个好主意.
或者如果我注册 Info 有帮助吗?喜欢 registerKryoClasses(Array(classOf[Info]))

最佳答案

根据 Spark's documentation , SparkSQL 不使用 Kryo 或 Java 序列化。

Datasets are similar to RDDs, however, instead of using Java serialization or Kryo they use a specialized Encoder to serialize the objects for processing or transmitting over the network. While both encoders and standard serialization are responsible for turning an object into bytes, encoders are code generated dynamically and use a format that allows Spark to perform many operations like filtering, sorting and hashing without deserializing the bytes back into an object.



它们比 Java 或 Kryo 轻得多,这是可以预期的(序列化是一项更可优化的工作,比如 3 个 long 和两个 int 的行),而不是一个类、它的版本描述、它的内部变量。 .) 并且必须实例化它。

话虽如此,有一种方法可以将 Kryo 用作编码器实现,请参见此处的示例: How to store custom objects in Dataset? .但这意味着在数据集中存储自定义对象(例如非产品类)的解决方案,而不是专门针对标准数据帧。

如果没有 Java 序列化程序的 Kryo,为自定义的非产品类创建编码器会有些受限(请参阅有关用户定义类型的讨论),例如,从这里开始: Does Apache spark 2.2 supports user-defined type (UDT)?

关于apache-spark - Cryo 对 Spark SQL 有帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49270880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com