火花广播没有保存在执行程序内存中

时间:2017-11-06 19:43:15

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

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

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

1- https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-TorrentBroadcast.html

2- print screen before broadcast

在添加'log4j.logger.org.apache.spark.storage.BlockManager = TRACE'之后添加了广播过程的日志,如此处所示 - print screen after broadcast

3- https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-blockmanager.html

下面是代码 -

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)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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