2015-04-30 23 views
5

Tôi có RDD với NHANY cột (ví dụ: hàng trăm), làm cách nào để thêm một cột nữa vào cuối RDD này?Làm cách nào để thêm cột mới vào Spark RDD?

Ví dụ, nếu RDD của tôi là như dưới đây:

123, 523, 534, ..., 893 
    536, 98, 1623, ..., 98472 
    537, 89, 83640, ..., 9265 
    7297, 98364, 9, ..., 735 
    ...... 
    29, 94, 956, ..., 758 

làm thế nào tôi có thể thêm một cột với nó, có giá trị là tổng của các cột thứ hai và thứ ba?

Cảm ơn bạn rất nhiều.

+0

Lưu ý rằng dataframes là không thay đổi. Bạn không thể thay đổi một cái, nhưng bạn có thể tạo một cái mới từ cái cũ ... xem http://stackoverflow.com/questions/29109916/updating-a-dataframe-column-in-spark – Paul

Trả lời

3

bạn có RDD của tuple 4, áp dụng bản đồ và chuyển nó sang tuple5

val rddTuple4RDD = ........... 
val rddTuple5RDD = rddTuple4RDD.map(r=> Tuple5(rddTuple4._1, rddTuple4._2, rddTuple4._3, rddTuple4._4, rddTuple4._2 + rddTuple4._3)) 
+3

Cảm ơn sb '. Một vấn đề là trong dữ liệu thực của tôi, có nhiều cột (ví dụ: hàng trăm), không dễ liệt kê các giá trị của tất cả các cột. Có cách nào để xử lý nhiều cột không? – Carter

5

Bạn không cần phải sử dụng Tuple * đối tượng ở tất cả cho thêm một cột mới vào một RDD.

Nó có thể được thực hiện bằng cách ánh xạ mỗi hàng, lấy nội dung ban đầu của nó cộng với các yếu tố bạn muốn thêm, ví dụ:

val rdd = ... 
val withAppendedColumnsRdd = rdd.map(row => { 
    val originalColumns = row.toSeq.toList 
    val secondColValue = originalColumns(1).asInstanceOf[Int] 
    val thirdColValue = originalColumns(2).asInstanceOf[Int] 
    val newColumnValue = secondColValue + thirdColValue 
    Row.fromSeq(originalColumns :+ newColumnValue) 
    // Row.fromSeq(originalColumns ++ List(newColumnValue1, newColumnValue2, ...)) // or add several new columns 
}) 
Các vấn đề liên quan