首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免在GeoSpark的范围查询中超出gc开销限制?

如何避免在GeoSpark的范围查询中超出gc开销限制?
EN

Stack Overflow用户
提问于 2019-07-27 23:32:11
回答 1查看 172关注 0票数 0

我使用的是带有GeoSpark 1.2.0扩展的Spark 2.4.3。

我有两张表要连接,作为距离距离。一个表(t1),如果大约100K行只有一列,这就是Geospark的几何形状。另一个表(t2)大约有30M行,它由一个Geospark值和一个Geospark的几何列组成。

我想要做的只是一个简单的:

代码语言:javascript
复制
    val spark = SparkSession
      .builder()
//      .master("local[*]")
      .config("spark.serializer", classOf[KryoSerializer].getName)
      .config("spark.kryo.registrator", classOf[GeoSparkKryoRegistrator].getName)
      .config("geospark.global.index", "true")
      .config("geospark.global.indextype", "rtree")
      .config("geospark.join.gridtype", "rtree")
      .config("geospark.join.numpartition", 200)
      .config("spark.sql.parquet.filterPushdown", "true")
//      .config("spark.sql.shuffle.partitions", 10000)
      .config("spark.sql.autoBroadcastJoinThreshold", -1)
      .appName("PropertyMaster.foodDistanceEatout")
      .getOrCreate()

GeoSparkSQLRegistrator.registerAll(spark)

spark.sparkContext.setLogLevel("ERROR")

spark.read
  .load(s"$dataPath/t2")
  .repartition(200)
  .createOrReplaceTempView("t2")

spark.read
  .load(s"$dataPath/t1")
  .repartition(200)
  .cache()
  .createOrReplaceTempView("t1")

val query =
  """
    |select /*+ BROADCAST(t1) */
    |  t2.cid, ST_Distance(t1.geom, t2.geom) as distance
    |  from t2, t1 where ST_Distance(t1.geom, t2.geom) <= 3218.69""".stripMargin

spark.sql(query)
  .repartition(200)
  .write.mode(SaveMode.Append)
  .option("path", s"$dataPath/my_output.csv")
  .format("csv").save()

我尝试了不同的配置,当我在本地运行或在我的笔记本电脑(tot mem 16 of和8核)上的本地集群上运行它时,都没有任何幸运,因为程序在GeoSpark的"Distinct at Join“时崩溃,有很多混洗。但是,我不能从SparkSQL语法中删除混洗。我想在最大的表上添加一个额外的列id,例如每200行左右添加一个相同的整数,并按此重新分区,但也不起作用。

我期待着一个用于GeoSpark索引的分割器,但我不确定它是否有效。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-07-28 17:47:43

我自己找到了一个答案,因为GC开销的问题是由于分区,但也是由于GeoSpark分区程序(基于索引)所需的内存,以及由于长时间地理查询计算而导致的超时,这些计算已经根据GeoSpark网站本身的建议添加了以下参数:

代码语言:javascript
复制
spark.executor.memory 4g
spark.driver.memory 10g
spark.network.timeout 10000s
spark.driver.maxResultSize 5g
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57233576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档