为什么会出现PySpark Pandas_udf?

    Apache Arrow 是一种内存中的列式数据格式,用于 Spark 中以在 JVM 和 Python 进程之间有效地传输数据。下面学习从Pandas转化到Spark的DF以及Spark的DF通过toPandas转化为Pandas的DataFrame。

Apache Arrow 是 Apache 基金会全新孵化的一个顶级项目。一个跨平台的在内存中以列式存储的数据层,它设计的目的在于作为一个跨平台的数据层,来加快大数据分析项目的运行速度。

Pandas 建立在ApacheArrow 之上,带来了低开销,高性能的udf。

Apache Arrow 是一种内存中的列式数据格式,用于 Spark 中以在 JVM 和 Python 进程之间有效地传输数据。目前这对使用 Pandas/NumPy 数据的 Python 用户最有益。它的使用不是自动的,可能需要对配置或代码进行一些小的更改才能充分利用并确保兼容性。

在代码中添加启动arrow:

     在使用调用将 Spark DataFrame 转换为 Pandas DataFrame 以及使用DataFrame.toPandas().pandas DataFrame 从 Pandas DataFrame 创建 Spark DataFrame 时, Arrow 可用作优化SparkSession.createDataFrame()。要在执行这些调用时使用 Arrow,用户需要首先将 Spark 配置设置spark.sql.execution.arrow.pyspark.enabled为true. 默认情况下禁用此功能。

此外,spark.sql.execution.arrow.pyspark.enabled如果在 Spark 中的实际计算之前发生错误,则启用的优化可以自动回退到非 Arrow 优化实现。这可以通过下面命令来控制:

对 Arrow 使用上述优化将产生与未启用 Arrow 时相同的结果,但是效率提升很多。

请注意,即使使用 Arrow,也会DataFrame.toPandas()导致将 DataFrame 中的所有记录收集到驱动Driver程序中。当前并非所有 Spark 数据类型都受支持,如果列具有不受支持的类型,则会引发错误。如果在运行期间发生错误SparkSession.createDataFrame(),Spark 将回退以创建没有 Arrow 的 DataFrame。

资源下载: