私はScala-Sparkで初めてですが、私はこれで最終プロジェクトの学士号を開発する必要があります。RDD [Row] .map内のgetIntが "error:value getIntはAnyのメンバーではありません"と表示されるのはなぜですか?
私はK平均アルゴリズムを構築するためのデータから試しています。 データはkaggleからです:https://www.kaggle.com/murderaccountability/homicide-reports
私はデータを使ってファイルを読みました。 ケースクラスを次のように作成します。
case class CrimeReport (Record_ID: String, Agency_Name: String,
City: String, State: String, Year: Int, Month: Int, Crime_Type: String,
Crime_Solved: String, Victim_Sex: String, Victim_Age: Int, Victim_Race: String,
Perpetrator_Sex: String, Perpetrator_Age: String, Perpetrator_Race: String, Relationship: String, Victim_Count: String)
データをケースクラスにマップします。例えば、月は文字列であり、私はこの解析する関数を定義するのIntを(私の特徴ベクトルの後に作成する)必要がある、として:
//Parsear Month: String ===> Int
def parseMonthToNumber(month: String) : Int = {
var result = 0
month match {
case "January" => result = 1
case "February" => result = 2
case "March" => result = 3
case "April" => result = 4
case "May" => result = 5
case "June" => result = 6
case "July" => result = 7
case "August" => result = 8
case "September" => result = 9
case "October" => result = 10
case "November" => result = 11
case _ => result = 12
}
result
}
data = sc.textFile (... .csv)
val data_split = data.map(line => line.split(","))
val allData = data_split.map(p => CrimeReport(p(0).toString,
p(1).toString, p(2).toString, p(3).toString, parseInt(p(4)),
parseMonthToNumber(p(5)), p(6).toString, p(7).toString, p(8).toString,
parseInt(p(9)), p(10).toString, p(11).toString, p(12).toString,
p(13).toString, p(14).toString, p(15).toString))
//DataFrame
val allDF = allData.toDF()
//convert data to RDD which will be passed to KMeans
val rowsRDD = allDF.rdd.map(x =>
(x(0).getString, x.getString(1), x.getString(2), x.getString(3), x(4).getInt, x(5).getInt, x.getString(6), x.getString(7), x.getString(8), x(9).getInt, x.getString(10), x.getString(11), x.getString(12), x.getString(13), x.getString(14), x.getString(15))
)
をしかし、私はこのエラーを取得する:
error: value getInt is not a member of Any
(x(0).getString, x.getString(1), x.getString(2), x.getString(3), x(4).getInt, x(5).getInt, x.getString(6), x.getString(7), x.getString(8), x(9).getInt, x.getString(10), x.getString(11), x.getString(12), x.getString(13), x.getString(14), x.getString(15))
^
なぜ?
感謝そんなに! :)あなたの助けを借りて、私はどこでエラーが発生したかを知ることができました。 2つありました。まず、DataFrameをDataSetに置き換えます。もう一つはval rowsRDD = allDF.rdd.map {x => ...}にありました。私は列の名前で属性を呼び出す必要がありました。つまり、私のケースクラスで定義した名前で呼び出しを行いました。 no(x(5)、x(6)、...)のような位置はありません。 – Borja