PySpark:设置执行程序/内核和内存本地计算机

脓毒症

因此,我查看了有关Pyspark,Jupyter和设置内存/核心/执行程序(以及相关内存)的大量文章。

但我似乎被困住了-

问题1:我没有看到我的机器使用内核或内存。为什么?我可以对准考者/核心/内存进行一些调整以优化读取文件的速度吗?问题2:还有什么办法可以让我看到进度条,其中显示了导入了多少文件(spark-monitor似乎没有这样做)。

我正在将33.5gb文件导入pyspark。

机器具有112 GB或RAM 8核/ 16个虚拟核。

from pyspark.sql import SparkSession
spark = SparkSession \
    .builder \
    .appName("Summaries") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()
conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '4g'), 

('spark.app.name', 'Spark Updated Conf'), 
('spark.driver.cores', '4'), ('spark.executor.cores', '16'), 
('spark.driver.memory','90g')])
spark.sparkContext.stop()
spark = SparkSession.builder.config(conf=conf).getOrCreate()
df = spark.read.json("../Data/inasnelylargefile.json.gz")

我假设pyspark即使在读取文件时也正在发挥作用(因此,我应该看到大量的内核/内存利用率)。但是我没有看到它。帮助!

更新:使用较小的zip文件进行了测试(89 MB)

Pyspark需要72秒Pandas需要10.6秒使用的代码:

start = time.time()
df = spark.read.json("../Data/small.json.gz")
end = time.time()
print(end - start)

start = time.time()
df = pa.read_json('../Data/small.json.gz',compression='gzip', lines = True)
end = time.time()
print(end - start)
克罗诺斯岛

尽管您问题的答案仅在于以下问题之一,但让我重写您的示例以解释正在发生的事情。

设置您的配置

首先,您不需要启动和停止上下文来设置配置。从spark 2.0开始,您可以创建spark会话,然后设置config选项。

from pyspark.sql import SparkSession
spark = (SparkSession.builder.appName("yourAwesomeApp").getOrCreate())
spark.conf.set("spark.executor.memory", "40g")
spark.conf.set("spark.executor.cores", "2")

读取数据

Spark将懒惰地评估DAG。您所测量的时间不是数据加载到数据帧中的时间,而是JSON文件的模式推断模式推断非常昂贵,您应该尝试通过设置数据的模式来避免这种情况。您会发现以下两者之间的性能差异很大:

df = spark.read.json("../data/a_very_large_json.json.gz")

from pyspark.sql.types import (
    StructType, 
    StringType, 
    StructField,
)
json_schema = schema = StructType([
    StructField('data', StructType([
        StructField("field1", StringType(), nullable=False),
        StructField("field2", StringType(), nullable=False),
        StructField("field3", StringType(), nullable=True),
        StructField("field4", StringType(), nullable=True),
        StructField("field5", LongType(), nullable=False),
    ])),
])
df = spark.read.json("../data/a_very_large_json.json.gz", schema=json_schema)

如果提供了该模式,则该指令应几乎立即生效。正如另一位用户已经提到的那样,要执行任务,您需要进行一项活动,例如表演,领导,收集,坚持等等。

df.show()

您可以在配置上设置执行程序实例和核心的数量,但是这些实例的实际使用还取决于您的输入数据以及您执行的转换/操作。根据您的描述,我假设您正在独立模式下工作,因此默认使用一个执行程序实例(使用所有内核),并且应将执行程序内存设置为使用可用的实例。据我所记得,当您在独立模式下工作时,它将spark.executor.instances被忽略,而执行程序的实际数量取决于可用内核的数量以及spark.executor.cores

与熊猫比较

如果仅使用一个节点,将数据加载到数据帧中,则spark和pandas之间的比较是不公平的。Spark总是会有更高的开销。当您的数据集不适合一台计算机的内存并且您有多个节点来执行计算工作时,火花将闪耀。如果您对大熊猫感到满意,我想您可能会对Databricks的无尾熊感兴趣。

建议

我更喜欢在应用程序外部设置执行细节(例如,使用spark-submit参数)。在极少数情况下,为了提高性能,您需要将其中一些设置为代码,但是对于每个新版本的Spark,这种情况都不那么常见如果您能够实现这一目标,那么您的应用程序将更加面向未来,并且易于扩展。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

执行程序内存和本地部署

来自分类Dev

通过网络在远程计算机上执行程序

来自分类Dev

当计算机无法及时执行程序而必须执行时会发生什么

来自分类Dev

在计算机/服务器之间进行程序执行切换

来自分类Dev

如何设置Spark执行程序的内存?

来自分类Dev

如何不在远程计算机的后台运行程序和脚本?

来自分类Dev

TeamViewer远程计算机应用程序设置本地计算机剪贴板文本

来自分类Dev

使用超级计算机运行程序

来自分类Dev

在本地计算机上设置最新的django代码以学习和开发?

来自分类Dev

在本地计算机和ssh会话中以不同的方式设置$ PS1

来自分类Dev

如何从本地计算机执行存储在远程计算机上的Shell脚本?

来自分类Dev

Spark Shell的默认执行程序和内核数

来自分类Dev

使用本地提供程序后如何“清理”计算机?

来自分类Dev

配置执行程序内存和每个Worker节点的执行程序数

来自分类Dev

跨计算机和本地的Powershell脚本打开文件

来自分类Dev

在本地和远程计算机上运行的Shell脚本

来自分类Dev

YARN上的Spark:执行程序内存少于通过spark-submit设置的执行程序内存

来自分类Dev

如何将程序设置保存到计算机?

来自分类Dev

如何从远程计算机复制,执行和检索数据?

来自分类Dev

不同的内核报告同一台计算机上的总内存量不同

来自分类Dev

不同的内核报告同一台计算机上的总内存量不同

来自分类Dev

SSH进入计算机,然后启动交互式命令行程序

来自分类Dev

根据我运行程序的计算机使用不同的路径

来自分类Dev

在远程计算机上的Shell脚本中执行命令,并在本地计算机上获取输出

来自分类Dev

我可以设置本地计算机的终端颜色以使用ssh插入的计算机的终端颜色吗?

来自分类Dev

将远程计算机上的c程序的输出管道传输到本地计算机

来自分类Dev

使用x11从远程(MacOS)计算机在本地(Linux)计算机上使用GUI程序吗?

来自分类Dev

客户计算机和WDS驱动程序错误

来自分类Dev

如何在Spark中处理执行程序内存和驱动程序内存?

Related 相关文章

  1. 1

    执行程序内存和本地部署

  2. 2

    通过网络在远程计算机上执行程序

  3. 3

    当计算机无法及时执行程序而必须执行时会发生什么

  4. 4

    在计算机/服务器之间进行程序执行切换

  5. 5

    如何设置Spark执行程序的内存?

  6. 6

    如何不在远程计算机的后台运行程序和脚本?

  7. 7

    TeamViewer远程计算机应用程序设置本地计算机剪贴板文本

  8. 8

    使用超级计算机运行程序

  9. 9

    在本地计算机上设置最新的django代码以学习和开发?

  10. 10

    在本地计算机和ssh会话中以不同的方式设置$ PS1

  11. 11

    如何从本地计算机执行存储在远程计算机上的Shell脚本?

  12. 12

    Spark Shell的默认执行程序和内核数

  13. 13

    使用本地提供程序后如何“清理”计算机?

  14. 14

    配置执行程序内存和每个Worker节点的执行程序数

  15. 15

    跨计算机和本地的Powershell脚本打开文件

  16. 16

    在本地和远程计算机上运行的Shell脚本

  17. 17

    YARN上的Spark:执行程序内存少于通过spark-submit设置的执行程序内存

  18. 18

    如何将程序设置保存到计算机?

  19. 19

    如何从远程计算机复制,执行和检索数据?

  20. 20

    不同的内核报告同一台计算机上的总内存量不同

  21. 21

    不同的内核报告同一台计算机上的总内存量不同

  22. 22

    SSH进入计算机,然后启动交互式命令行程序

  23. 23

    根据我运行程序的计算机使用不同的路径

  24. 24

    在远程计算机上的Shell脚本中执行命令,并在本地计算机上获取输出

  25. 25

    我可以设置本地计算机的终端颜色以使用ssh插入的计算机的终端颜色吗?

  26. 26

    将远程计算机上的c程序的输出管道传输到本地计算机

  27. 27

    使用x11从远程(MacOS)计算机在本地(Linux)计算机上使用GUI程序吗?

  28. 28

    客户计算机和WDS驱动程序错误

  29. 29

    如何在Spark中处理执行程序内存和驱动程序内存?

热门标签

归档