0

Ich habe einen Datensatz test.txt. Es enthält Daten wie untenMapping und Entfernen von Duplikaten in Spark Scala?

1::1::3 
1::1::2 
1::2::2 
2::1::5 
2::1::4 
2::2::2 
3::1::1 
3::2::2 

Ich habe Datenrahmen mit dem folgenden Code erstellt.

case class Rating(userId: Int, movieId: Int, rating: Float) 
def parseRating(str: String): Rating = { 
val fields = str.split("::") 
assert(fields.size == 3) 
Rating(fields(0).toInt, fields(1).toInt, fields(2).toFloat) 
} 

val ratings = spark.read.textFile("C:/Users/cravi/Desktop/test.txt").map(parseRating).toDF() 

Aber wenn ich versuche, die Ausgabe I unten Ausgang

[1,1,3.0] 
[1,1,2.0] 
[1,2,2.0] 
[2,1,2.0] 
[2,1,4.0] 
[2,2,2.0] 
[3,1,1.0] 
[3,2,2.0] 

Aber ich will Ausgabe drucken bin immer zu drucken wie unter D. h Entfernen von doppelten Kombinationen und anstelle von field(2) value 1.0.

[1,1,1.0] 
[1,2,1.0] 
[2,1,1.0] 
[2,2,1.0] 
[3,1,1.0] 
[3,2,1.0] 

Bitte helfen Sie mir dabei, wie dies erreicht werden kann.

Antwort

2

Sobald Sie ein dataframe Entfernen Duplikate erstellt haben, können durch Aufruf erfolgen .dropDuplicates(columnNames) und die dritte Spalte mit 1.0 bevölkern können mit lit und withColumn Funktionen durchgeführt werden.

Um es zusammenzufassen, einfache Lösung kann wie folgt

val ratings = sc.textFile("C:/Users/cravi/Desktop/test.txt") 
    .map(line => line.split("::")) 
    .filter(fields => fields.length == 3) 
    .map(fields => Rating(fields(0).toInt, fields(1).toInt, 1.0f)) 
    .toDF().dropDuplicates("userId", "movieId") 

ratings.show(false) 

, die Sie

+------+-------+------+ 
|userId|movieId|rating| 
+------+-------+------+ 
|3  |1  |1.0 | 
|2  |2  |1.0 | 
|1  |2  |1.0 | 
|1  |1  |1.0 | 
|2  |1  |1.0 | 
|3  |2  |1.0 | 
+------+-------+------+ 
+0

Du hast bereits helfen sie, die Antwort bekam getan werden :) nicht geben sollte? –

Verwandte Themen