私はScalaでデータを使いこなそうとしています。私は今、ロードブロッキングを打った。私はリストを含むプログラムにテキストファイルを読み込み、各ヘッダを読み込むためのケースクラスを作成しました。私は(String、String)のマッピングをdoubleにすることに成功しましたが、これを代わりにstringを(string、double)にマッピングしたいと思います。関連するコードはここにある:Scala - 1つのキーを異なる型の複数の値にマッピングする
def averageofactions(): Map[(String,String), Double] = {
datafile.groupBy(d => (d.user, d.typeofaction))
.mapValues(averageof => averageof.map(_.amount).sum /averageof.length)
}
それは(ユーザーID、アクション)を与えるように、私は(特定のユーザーによる特定のアクションの平均量を)したいが、フォーマットされたものを私に与えている - 単に私のに対して>平均を、 >平均
アクション2 - - ように>
平均と
アクション1:
USERID1のようなリストが欲しいです。おそらくこれを行う最良の方法は、Map [String、(String、Double)]、またはおそらくマルチマップ/ハッシュマップを返すように変更することですが、これについてどうやって行くのかは分かりません。私は試しました:
def modifiedaverage(): Map[String, (List[String], Double)] = {
datafile.groupBy(d => (d.user))
.mapValues(averageof => (averageof.map(_.typeofaction), averageof.map(_.amount).sum/averageof.length))
}
しかし、ここでの出力はまったく変です。この機能を書き直して、私が望むものを私に与えることはできますか?
def averageofactions(): Map[String, Map[String, Double]] = {
datafile.groupBy(_.user)
.mapValues(_.groupBy(_.typeofaction)
.mapValues(averageof => averageof.map(_.amount).sum /averageof.length))
}
また、あなたがこの「フラット化」をしたい場合:
が見えますMap [String、(List [Strin g]、Double)] ''なぜなら、それぞれの "アクション"は独自の "値"を持っているからです。 –