0

Нужна помощь по вложенной группировке. Очень новое для искры и скалы. Цените, что вы посоветуете.Агрегация искры - вложенные группы

Я работаю над преобразованием коллекции монго с использованием искры. Я работаю с IntelliJ-Idea. Вот детали коллекции:

{ 
_id: 
customer: 
product: 
location: 
date: 
transType: 
} 

использования: Для каждого продукта «» и для каждого места, которые клиенты с типом транзакции «заказал».

// выводим что-то вроде этого

 { 
     Product: ABCD 
      location: North america 
      customer: Cust 1, type: ordered 
       total: 200 
     } 
     { 
     Product: EFGH 
      location: North america 
      customer: Cust 2, type: Ordered 
       total: 300 
} 

Вот то, что я до сих пор:

val conf = new SparkConf().setAppName("PVL").setMaster("local"). 
     set("spark.mongodb.input.uri","mongodb://127.0.0.1:27017/product.transactionEvent"). 
     set("spark.mongodb.output.uri", "mongodb://127.0.0.1:27017/product.transctionResult") 
    val sc = new SparkContext(conf) 

val rdd = sc.loadFromMongoDB() 
val aggRdd = rdd.withPipeline(Seq(
     Document.parse("{$match: {transType: 'ordered'}}"), 
     Document.parse("""{ $group: {_id: {prodId: "$prodId", customer: "$customer", location: "$location", Transtype: "$Transtype"}, total: {$sum:1}}}"""), 
     Document.parse("""{$group: {_Id: {prodId: "$_id.prodId"}, details: {$addToSet: {customer: "$_id.customer", location: "$_id.location", transType: "$_id.transType", total: "$total"}}}}"""))) 

Но это не работает по какой-то причине. Ошибка:

«неизвестный оператор группы„PRODID“» на сервере

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

+0

В сообщении об ошибке указано, что поле вашей группы 'prodId' не существует в вашей коллекции' transactionEvent'. Я бы посоветовал узнать о [агрегации MongoDB] (https://docs.mongodb.com/manual/aggregation/). Сначала проверьте свою агрегацию через [mongo shell] (https://docs.mongodb.com/manual/mongo/), чтобы убедиться, что она работает. –

+0

Спасибо, Ван. У меня ** есть поле с именем prodId. Я просто не перечислял его здесь в вопросе, но у меня есть это в коллекции. Я тестировал его также в оболочке mongo, и он бросает ту же ошибку. Я думаю, что это имеет какое-то отношение к моему гнезду в группе. – Vamsi

+0

Вы должны обновить свой вопрос с помощью правильного примера документа, а также пример агрегации, который вы тестируете на оболочке mongo. В противном случае людям было бы трудно помочь вам без надлежащего контекста. –

ответ

0

Я знаю, в чем проблема. В одном из операторов $ group у меня есть _id с заглавной буквы (например, _Id). Как только я удалил это, он работал нормально.

Иными словами, такие ошибки, как unknown group operator или <field> should be inside the object означает, что код не может распознать оператора группы/поле. причины могут быть:

  1. первичного поля в группе _id может быть капитализированы
  2. недостающие запятые
  3. Нет Оператор группы не объявленные для поля группы
  4. и т.д ..

Так проверьте код на наличие этих ошибок.

Thanks

 Смежные вопросы

  • Нет связанных вопросов^_^