0

这是我的 scala 代码。我正在尝试使用 geotrellis 库将 geotiff 文件摄取到 HDFS 中。

package RasterDataIngest.RasterDataIngestIntoHadoop

import geotrellis.spark._
import geotrellis.spark.ingest._
import geotrellis.spark.io.hadoop._
import geotrellis.spark.io.index._
import geotrellis.spark.tiling._
import geotrellis.spark.utils.SparkUtils
import geotrellis.vector._
import org.apache.hadoop.fs.Path
import org.apache.spark._
import com.quantifind.sumac.ArgMain
import com.quantifind.sumac.validation.Required

class HadoopIngestArgs extends IngestArgs {
  @Required var catalog: String = _
  def catalogPath = new Path(catalog)
}

object HadoopIngest extends ArgMain[HadoopIngestArgs] with Logging {
  def main(args: HadoopIngestArgs): Unit = {
   System.setProperty("com.sun.media.jai.disableMediaLib", "true")

    implicit val sparkContext = SparkUtils.createSparkContext("Ingest")
    val conf = sparkContext.hadoopConfiguration
    conf.set("io.map.index.interval", "1")

    val catalog = HadoopRasterCatalog(args.catalogPath)
    val source = sparkContext.hadoopGeoTiffRDD(args.inPath)
    val layoutScheme = ZoomedLayoutScheme()

    Ingest[ProjectedExtent, SpatialKey](source, args.destCrs, layoutScheme, args.pyramid){ (rdd, level) => 
      catalog
        .writer[SpatialKey](RowMajorKeyIndexMethod, args.clobber)
        .write(LayerId(args.layerName, level.zoom), rdd)
    }
  }
}

当我运行此代码时,我收到以下错误。请帮我解决这个错误。

java.lang.IllegalAccessException: Class org.osgeo.proj4j.Registry can not access a member of class org.osgeo.proj4j.proj.Projection with modifiers "protected"
4

1 回答 1

0

我相信这个问题与糟糕的 sbt 缓存或 Java 版本不匹配有关。试用最新的稳定 GeoTrellis 版本:0.10.3(Scala 2.10/2.11、Java 8、Spark 1.6.x)。如果您计划将 GeoTrellis 与 Spark 2 一起使用,请查看 GeoTrellis 快照(1.0.0 版将支持 Spark 2+、Java 8 和 Scala 2.11)。

于 2016-11-06T13:44:35.197 回答