我有一个地理空间数据的数据集,我需要像时尚网格一样进行采样。我想将实验区域划分为一个网格,并使用一个名为“sample()”的采样函数,在网格的每个方格上取三个输入,然后将采样的数据集合并在一起。我当前的方法使用了map函数,但我了解到你不能拥有RDD的RDD / Datasets / DataFrames。那么如何将采样函数应用于我的数据集的子集呢?这是我试图用map reduce方式编写的代码:
val sampleDataRDD = boundaryValuesDS.rdd.map(row => {
val latMin = row._1
val latMax = latMin + 0.0001
val lonMin = row._2
val lonMax = lonMin + 0.0001
val filterDF = featuresDS.filter($"Latitude" > latMin).filter($"Latitude"< latMax).filter($"Longitude">lonMin).filter($"Longitude"< lonMin)
val sampleDS = filterDF.sample(false, 0.05, 1234)
(sampleDS)
})
val output = sampleDataDS.reduce(_ union _)
我尝试了各种方法来解决这个问题。将sampleDS转换为RDD和List,但在输出时调用“collect”时仍然会继续获得NullPointerExcpetion。
我想我需要找到一个不同的解决方案,但我没有看到它。
到目前为止,我已经引用了这些问题:
Caused by: java.lang.NullPointerException at org.apache.spark.sql.Dataset