我在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)
有什么想法吗?
答案 0 :(得分:0)
您能否使用广播变量来加入数据或进行某种操作。它可能很懒,所以不使用任何内存