0

データセットtest.txtがあります。以下のようなデータが含まれています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 

以下のコードを使用してデータフレームを作成しました。

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() 

しかし、私は、私は、出力

[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] 

の下に取得しています。しかし、私はつまり、以下のような出力を印刷したい出力を印刷しようとしています重複した組み合わせを削除し、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] 

どうすればこの問題を解決できますか。

答えて

2

あなたはdataframe削除重複を作成した後は、コール.dropDuplicates(columnNames)によって行うことができると1.0で3番目の列に移入する​​3210とwithColumn機能を使用して行うことができます。

を要約すると、簡単な解決策は、あなたを与える必要があります

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) 

を以下のように行うことができます

あなたはすでに答え:)彼らは助けにはならなかったんだ
+------+-------+------+ 
|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

? –

関連する問題