2

Итак, я пытаюсь переформатировать проект, над которым я работаю, использовать API Dataset и возникал ряд проблем с ошибками кодирования. Из того, что я читал, я думаю, что я должен хранить массивы примитивных значений в наборе данных. Однако следующий класс дает мне ошибки в кодировании:Наборы массивов в Spark (1.6.1)

case class InvertedIndex(partition:Int, docs:Array[Int], indices:Array[Long], weights:Array[Double]) 

val inv = RDD[InvertedIndex] 
val invertedIndexDataset = sqlContext.createDataset(inv) 
invertedIndexDataset.groupBy(x => x.partition).mapGroups { 
    //... 
} 

Может кто-то помочь мне понять, в чем проблема? Наборы данных в настоящее время не обрабатывают массивы примитивов, или есть что-то дополнительное, что мне нужно сделать, чтобы заставить их работать?

Спасибо вы

Edit 1:

Вот полная ошибка я получаю

Error:(223, 84) Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases. 
    val similarities = invertedIndexDataset.groupByKey(x => x.partition).mapGroups { 
+0

Вы можете посмотреть на [это SO сообщение] (http://stackoverflow.com/questions/36449368/using-an-optionsome-primitive-type-in-spark-dataset-api) , Какова конкретная ошибка, которую вы получаете? –

+0

У вас есть: import sqlContext.implicits._ –

+0

@RobertHorvick Да, однако я импортирую его в функцию, так что это вызовет проблему? (эта функция принимает параметр sparkContext в качестве параметра, поэтому было бы сложно получить класс sqlContext класса) –

ответ

0

следующие работы, как ожидается, в Спарк 2.0.

import spark.implicits._ 

spark.createDataset(Array(1,2) :: Array(1) :: Array(2) :: Nil) 
res0:org.apache.spark.sql.Dataset[Array[Int]] = [value: array<int>] 
Смежные вопросы