将函数应用于Spark数据集的子集(迭代)

时间:2018-03-12 20:53:59

标签: scala apache-spark mapreduce

我有一个地理空间数据的数据集,我需要像时尚网格一样进行采样。我想将实验区域划分为一个网格,并使用一个名为“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

Creating a Spark DataFrame from an RDD of lists

0 个答案:

没有答案