【发布时间】: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