PySpark 如何在 SparkSql 和 Dataframes 中使用 pickle
PySpark how is pickle used in SparkSql and Dataframes
我试图了解 PySpark 如何将 pickle 用于 RDD 并避免它用于 SparkSql 和 Dataframes。问题的基础来自 this link.I 中的幻灯片#30,我在下面引用它以供参考:
"[PySpark] RDD 通常是腌制对象的 RDD。Spark SQL(和 DataFrames)避免了其中的一些"。
Spark中如何使用pickleSql?
在最初的 Spark RDD 模型中,RDD 描述了 Java 对象或 pickled Python 对象的分布式集合。但是,SparkSQL "dataframes"(包括数据集)代表 queries 对一个或多个 sources/parents。
为了评估查询并产生一些结果,Spark 确实需要处理记录和字段,但这些在内部以二进制、语言中性格式(称为 "encoded")表示。 Spark 可以在需要时将这些格式解码为任何支持的语言(例如,Python、Scala、R),但如果没有明确要求,将避免这样做。
例如:如果我在磁盘上有一个文本文件,我想计算行数,我使用如下调用:
spark.read.text("/path/to/file.txt").count()
Spark 无需将文本中的字节转换为 Python 字符串——Spark 只需要对它们进行计数。
或者,如果我们从 PySpark 执行 spark.read.text("...").show()
,那么 Spark 将 需要将一些记录转换为 Python 字符串——但只有满足查询所需的那些,并且 show()
意味着 LIMIT 因此仅评估少数记录并且 "decoded."
总而言之,使用 SQL/DataFrame/DataSet API,您用来操作查询的语言 (Python/R/SQL/...) 只是一种 "front-end" 控制语言,而不是执行实际计算的语言,也不需要将原始数据源转换为您正在使用的语言。这种方法可以在所有语言前端实现更高的性能。
我试图了解 PySpark 如何将 pickle 用于 RDD 并避免它用于 SparkSql 和 Dataframes。问题的基础来自 this link.I 中的幻灯片#30,我在下面引用它以供参考:
"[PySpark] RDD 通常是腌制对象的 RDD。Spark SQL(和 DataFrames)避免了其中的一些"。
Spark中如何使用pickleSql?
在最初的 Spark RDD 模型中,RDD 描述了 Java 对象或 pickled Python 对象的分布式集合。但是,SparkSQL "dataframes"(包括数据集)代表 queries 对一个或多个 sources/parents。
为了评估查询并产生一些结果,Spark 确实需要处理记录和字段,但这些在内部以二进制、语言中性格式(称为 "encoded")表示。 Spark 可以在需要时将这些格式解码为任何支持的语言(例如,Python、Scala、R),但如果没有明确要求,将避免这样做。
例如:如果我在磁盘上有一个文本文件,我想计算行数,我使用如下调用:
spark.read.text("/path/to/file.txt").count()
Spark 无需将文本中的字节转换为 Python 字符串——Spark 只需要对它们进行计数。
或者,如果我们从 PySpark 执行 spark.read.text("...").show()
,那么 Spark 将 需要将一些记录转换为 Python 字符串——但只有满足查询所需的那些,并且 show()
意味着 LIMIT 因此仅评估少数记录并且 "decoded."
总而言之,使用 SQL/DataFrame/DataSet API,您用来操作查询的语言 (Python/R/SQL/...) 只是一种 "front-end" 控制语言,而不是执行实际计算的语言,也不需要将原始数据源转换为您正在使用的语言。这种方法可以在所有语言前端实现更高的性能。