【问题标题】:PySpark how is pickle used in SparkSql and DataframesPySpark 如何在 SparkSql 和 Dataframes 中使用 pickle
【发布时间】:2017-06-25 18:54:22
【问题描述】:

我试图了解 PySpark 如何将 pickle 用于 RDD,并避免它用于 SparkSql 和 Dataframe。问题的基础来自this链接中的幻灯片#30。我在下面引用它以供参考:

“[PySpark] RDD 通常是腌制对象的 RDD。Spark SQL(和 DataFrames)避免了其中的一些”。

Spark Sql 中如何使用pickle?

【问题讨论】:

    标签: pyspark spark-dataframe pickle pyspark-sql


    【解决方案1】:

    在最初的 Spark RDD 模型中,RDD 描述了 Java 对象或腌制 Python 对象的分布式集合。但是,SparkSQL“数据帧”(包括数据集)表示针对一个或多个源/父项的查询

    为了评估查询并产生一些结果,Spark 确实需要处理记录和字段,但它们在内部以二进制、与语言无关的格式(称为“编码”)表示。 Spark 可以在需要时将这些格式解码为任何受支持的语言(例如 Python、Scala、R),但如果没有明确要求,则会避免这样做。

    例如:如果我在磁盘上有一个文本文件,我想计算行数,我使用如下调用:

    spark.read.text("/path/to/file.txt").count()

    Spark 不需要将文本中的字节转换为 Python 字符串——Spark 只需要计算它们。

    或者,如果我们从 PySpark 执行 spark.read.text("...").show(),那么 Spark 需要将一些记录转换为 Python 字符串 - 但只有满足查询所需的记录,以及 show()意味着一个 LIMIT,因此只有少数记录被评估和“解码”。

    总之,使用 SQL/DataFrame/DataSet API,您用来操作查询的语言 (Python/R/SQL/...) 只是一种“前端”控制语言,而不是执行实际计算,也不需要将原始数据源转换为您使用的语言。这种方法可以在所有语言前端实现更高的性能。

    【讨论】:

    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2015-12-22
    • 2020-06-07
    • 2017-12-06
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多