[সম্পাদনা: মার্চ ২০১ 2016: ভোটের জন্য ধন্যবাদ! যদিও সত্যই, এটি সর্বোত্তম উত্তর নয়, আমি মনে করি সমাধানগুলি ভিত্তিতে তৈরি করা হয়েছে withColumn
, withColumnRenamed
এবং cast
মেসেলম্যান, মার্টিন সেন এবং অন্যরা সহজ এবং পরিষ্কার পরিচ্ছন্ন করে রেখেছেন]।
আমি মনে করি আপনার দৃষ্টিভঙ্গি ঠিক আছে, মনে রাখবেন যে স্পার্কটি DataFrame
সারিগুলির একটি (অপরিবর্তনীয়) আরডিডি, সুতরাং আমরা কখনই কোনও কলামটি প্রতিস্থাপন করে না , কেবল DataFrame
প্রতিটি স্কিমার সাথে নতুন করে তৈরি করি ।
ধরে নিচ্ছেন নীচের স্কিমা সহ আপনার কাছে একটি আসল ডিএফ রয়েছে:
scala> df.printSchema
root
|-- Year: string (nullable = true)
|-- Month: string (nullable = true)
|-- DayofMonth: string (nullable = true)
|-- DayOfWeek: string (nullable = true)
|-- DepDelay: string (nullable = true)
|-- Distance: string (nullable = true)
|-- CRSDepTime: string (nullable = true)
এবং কিছু ইউডিএফ এর এক বা একাধিক কলামে সংজ্ঞায়িত:
import org.apache.spark.sql.functions._
val toInt = udf[Int, String]( _.toInt)
val toDouble = udf[Double, String]( _.toDouble)
val toHour = udf((t: String) => "%04d".format(t.toInt).take(2).toInt )
val days_since_nearest_holidays = udf(
(year:String, month:String, dayOfMonth:String) => year.toInt + 27 + month.toInt-12
)
কলামের ধরণের পরিবর্তন করা বা অন্য থেকে নতুন ডেটাফ্রেম তৈরি করা এইভাবে লেখা যেতে পারে:
val featureDf = df
.withColumn("departureDelay", toDouble(df("DepDelay")))
.withColumn("departureHour", toHour(df("CRSDepTime")))
.withColumn("dayOfWeek", toInt(df("DayOfWeek")))
.withColumn("dayOfMonth", toInt(df("DayofMonth")))
.withColumn("month", toInt(df("Month")))
.withColumn("distance", toDouble(df("Distance")))
.withColumn("nearestHoliday", days_since_nearest_holidays(
df("Year"), df("Month"), df("DayofMonth"))
)
.select("departureDelay", "departureHour", "dayOfWeek", "dayOfMonth",
"month", "distance", "nearestHoliday")
যা ফলন:
scala> df.printSchema
root
|-- departureDelay: double (nullable = true)
|-- departureHour: integer (nullable = true)
|-- dayOfWeek: integer (nullable = true)
|-- dayOfMonth: integer (nullable = true)
|-- month: integer (nullable = true)
|-- distance: double (nullable = true)
|-- nearestHoliday: integer (nullable = true)
এটি আপনার নিজের সমাধানের বেশ কাছাকাছি। সহজভাবে, প্রকারের পরিবর্তনগুলি এবং অন্যান্য রূপান্তরগুলি পৃথকভাবে হিসাবে রাখলে udf val
কোডটি আরও পঠনযোগ্য এবং পুনরায় ব্যবহারযোগ্য make