我不確定是否要記錄/打印以控制該格式的數據幀或繼續處理此類數據幀。
如果你想用這種結構的數據框,下面的代碼生成它:
import org.apache.spark.sql.{Row, SparkSession}
object Test extends App {
val sparkSession = SparkSession.builder().appName("test").master("local[*]").getOrCreate()
import sparkSession.implicits._
val columns = Seq("nm","date","id","amount")
val input = List(
(1233, "2017-01-23", 9253194, 2323),
(1234, "2017-01-24", 9253196, 4455),
(1235, "2017-01-25", 9253195, 5677)
)
sparkSession.createDataset(input).toDF(columns: _*)
.repartition(1)
.flatMap {
case Row(nm: Int, date: String, id: Int, amount: Int) =>
List[(String, Int, Int)](
(nm.toString, null.asInstanceOf[Int], null.asInstanceOf[Int]),
(date, id, amount)
)
}
.foreach(row => Console.println(row))
}
但也存在一些問題:
(1233,null,null) (1235,null,null) (1234,null,null) (2017-01-23,9253194,2323) (2017-01-25,9253195,5677) (2017-01-24,9253196,4455)
在總結,如果你要打印的行在這種格式中,您應該定義一個函數,它可以從給定的行生成一個字符串。
如果您想處理具有這種結構的數據幀,請不要這樣做。
因此新的數據幀只能有一列? – Fabich
編號不同行中的第一列和不同行中的其餘行3列 –
輸出數據框包含多少列。 –