【问题标题】:spark broadcast isn't being saved at the executors memory火花广播未保存在执行程序内存中
【发布时间】:2017-11-07 07:41:21
【问题描述】:

我在 EMR 上使用了 spark-shell - Spark 版本 2.2.0 / 2.1.0。 在尝试广播简单对象时(我的 CSV 文件仅包含 1 列,并且小于 2 MB)我注意到它并没有保存在每个执行程序内存中,而只是保存在驱动程序内存中,尽管它应该按照文档中的建议 @987654321 @

在广播之前(即 sc.broadcast(arr_collected) )和广播之后附加打印屏幕,显示我的结论。此外,我检查了工作人员的机器内存使用情况,与 Spark UI 中的相同,广播后它没有改变。

1-print screen before broadcast

2-print screen after broadcast

在添加 'log4j.logger.org.apache.spark.storage.BlockManager=TRACE' 后附加广播过程的日志,就像这里建议的那样 - https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-blockmanager.html

3-print screen broadcast logging

下面是代码 -

val input  = "s3://bucketName/pathToFile.csv"
val df = spark.read.format("com.databricks.spark.csv").option("header", "true").option("delimiter", ",").load(input)
val df_2 = df_read_for_bc.withColumn("is_exist",lit("true").cast("Boolean"))
val arr_collected = df_2.collect()

val broadcast_map_fraud_locations4 = sc.broadcast(arr_collected)

有什么想法吗?

【问题讨论】:

  • 请格式化您的代码sn-ps。

标签: scala apache-spark apache-spark-sql spark-dataframe


【解决方案1】:

您能否使用广播变量来加入数据或进行某种操作。它可能很懒所以不使用任何内存

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多