Я хотел бы создать СДР с записями в следующем формате:
(поездка, (данные начальной станции), (данные конечной станции))
import org.apache.spark._
val input1 = sc.textFile("data/trips/*")
val header1 = input1.first // to skip the header row
val trips = input1.filter(_ != header1).map(_.split(","))
val input2 = sc.textFile("data/stations/*")
val header2 = input2.first // to skip the header row
val stations = input2.filter(_!=header2).map(_.split(",")).keyBy(_(0).toInt)
def pjoined (joined: (Array[String], Array[String], Array[String])) = {
println(""+joined._1.deep.mkString(",")+"; "+joined._2.deep.mkString(",")+"; "+joined._3.deep.mkString(","))
}
val joinedtrips = trips.map(tup => (tup, (stations.filter(_._1==tup(4).toInt).first._2), (stations.filter(_._1==tup(7).toInt).first._2)))
joinedtrips.take(5).foreach(pjoined)
Второй последнийошибка строки со следующей ошибкой:
org.apache.spark.SparkException: преобразования и действия RDD могут вызываться только драйвером, но не внутри других преобразований;например, rdd1.map (x => rdd2.values.count () * x) недопустим, поскольку преобразование значений и действие count не могут быть выполнены внутри преобразования rdd1.map.
Каким был бы правильный и эффективный способ добиться этого?
station.csv:
station_id,name,lat,long,dockcount,landmark,installation,notes
2,San Jose Diridon Caltrain Station,37.329732,-121.901782,27,San Jose,8/6/2013,
3,San Jose Civic Center,37.330698,-121.888979,15,San Jose,8/5/2013,
...
trips.csv:
Trip ID,Duration,Start Date,Start Station,Start Terminal,End Date,End Station,End Terminal,Bike #,Subscription Type,Zip Code
4258,114,8/29/2013 11:33,San Jose City Hall,10,8/29/2013 11:35,MLK Library,11,107,Subscriber,95060
4265,151,8/29/2013 11:40,San Francisco City Hall,58,8/29/2013 11:42,San Francisco City Hall,58,520,Subscriber,94110
...
station_id
в station.csv должен совпадать с Start Terminal
(индекс 4) и End Terminal
(индекс 7) в trips.csv