Sử dụng Spark 1.5.0 và đưa ra mã sau, tôi hy vọng unionAll thành union DataFrame
s dựa trên tên cột của chúng. Trong đoạn mã, tôi đang sử dụng một số FunSuite để thông qua trong SparkContext sc
:Điều gì đang xảy ra với `unionAll` của Spark` DataFrame`?
object Entities {
case class A (a: Int, b: Int)
case class B (b: Int, a: Int)
val as = Seq(
A(1,3),
A(2,4)
)
val bs = Seq(
B(5,3),
B(6,4)
)
}
class UnsortedTestSuite extends SparkFunSuite {
configuredUnitTest("The truth test.") { sc =>
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._
val aDF = sc.parallelize(Entities.as, 4).toDF
val bDF = sc.parallelize(Entities.bs, 4).toDF
aDF.show()
bDF.show()
aDF.unionAll(bDF).show
}
}
Output:
+---+---+
| a| b|
+---+---+
| 1| 3|
| 2| 4|
+---+---+
+---+---+
| b| a|
+---+---+
| 5| 3|
| 6| 4|
+---+---+
+---+---+
| a| b|
+---+---+
| 1| 3|
| 2| 4|
| 5| 3|
| 6| 4|
+---+---+
Tại sao kết quả chứa trộn lẫn "b" và "a" cột, thay vì sắp xếp cột dựa trên tên cột? Có vẻ như một lỗi nghiêm trọng lỗi !?
Thx! Nó không phải là một vấn đề thực sự, như ít nhất trong trường hợp của tôi, thứ tự cột cần được thay đổi. Mặc dù, có thông tin này trong tài liệu Scala sẽ hữu ích và ngăn ngừa lỗi. Tuy nhiên, tôi sẽ cung cấp một 'unionAllVia ColumnNames' sắp xếp lại các cột, sao cho chúng phù hợp theo kiểu 1: 1, nếu có thể. –
@MartinSenne Trên thực tế, tài liệu Scala cung cấp cho bạn thông tin đủ để tìm ra hành vi chính xác được mô tả trong câu trả lời được chấp nhận. Cụ thể, 'Điều này tương đương với UNION ALL trong SQL ' – kasur
@MartinSenne để chỉ ra thứ tự các hàng. Điều này cần phải được đề cập trong tài liệu. –