मेरे पास है RDD [पंक्ति]:स्कैला: स्ट्रिंग मानों के लिए GroupBy योग कैसे करें?
|---itemId----|----Country-------|---Type----------|
| 11 | US | Movie |
| 11 | US | TV |
| 101 | France | Movie |
GroupBy Itemid कैसे करना है, जहां प्रत्येक पंक्ति अलग json वस्तु (RDD में प्रत्येक पंक्ति) है, ताकि मैं json की सूची के रूप में परिणाम बचा सकते हैं:
{"itemId" : 11,
"Country": {"US" :2 },"Type": {"Movie" :1 , "TV" : 1} },
{"itemId" : 101,
"Country": {"France" :1 },"Type": {"Movie" :1} }
RDD:
मैंने कोशिश की:
import com.mapping.data.model.MappingUtils
import com.mapping.data.model.CountryInfo
val mappingPath = "s3://.../"
val input = sc.textFile(mappingPath)
इनपुट की सूची है jsons जहाँ प्रत्येक पंक्ति json है जो मैं MappingUtils जो JSON पार्स करने और रूपांतरण का ख्याल रखता है का उपयोग कर CountryInfo POJO वर्ग के लिए मानचित्रण हूँ:
val MappingsList = input.map(x=> {
val countryInfo = MappingUtils.getCountryInfoString(x);
(countryInfo.getItemId(), countryInfo)
}).collectAsMap
MappingsList: scala.collection.Map[String,com.mapping.data.model.CountryInfo]
def showCountryInfo(x: Option[CountryInfo]) = x match {
case Some(s) => s
}
val events = sqlContext.sql("select itemId EventList")
val itemList = events.map(row => {
val itemId = row.getAs[String](1);
val çountryInfo = showTitleInfo(MappingsList.get(itemId));
val country = if (countryInfo.getCountry() == 'unknown)' "US" else countryInfo.getCountry()
val type = countryInfo.getType()
Row(itemId, country, type)
})
कुछ भी मुझे पता है कि मैं यह कैसे प्राप्त कर सकते हैं कर सकते हैं?
धन्यवाद!
क्या आरडीडी [पंक्ति] डेटाफ्रेम/डेटासेट से आया था? आरडीडी [पंक्ति] के साथ काम करना आम तौर पर आदर्श नहीं है हालांकि अभी भी करने योग्य है। –
मैंने डेटासेट से आरडीडी बनाया है। –
@ASpotySpot मेरे आरडीडी के साथ अपडेट किया गया –