Итак, я пытаюсь переформатировать проект, над которым я работаю, использовать 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 {
Вы можете посмотреть на [это SO сообщение] (http://stackoverflow.com/questions/36449368/using-an-optionsome-primitive-type-in-spark-dataset-api) , Какова конкретная ошибка, которую вы получаете? –
У вас есть: import sqlContext.implicits._ –
@RobertHorvick Да, однако я импортирую его в функцию, так что это вызовет проблему? (эта функция принимает параметр sparkContext в качестве параметра, поэтому было бы сложно получить класс sqlContext класса) –