简单实用举例
// Create a Row from values.
//可以直接创建row对象
private val row: Row = Row("a", "b", "c")
println(row) //[a,b,c]
//可以利用索引取值,从0开始
println(row(0))//a
println(row(1))//b
//Throws:
//ClassCastException – when data type does not match.
//可以利用各种get方法获取对应类型的元素,参数为索引
println(row.getString(1))//b
//返回位于位置i的值。
// 对于基元类型,如果value为null,则返回特定于基元的“zero value”,
// 即Int的0-使用isNullAt确保值不为null
println(row.getAs(0))//a
//ArrayIndexOutOfBoundsException
println(row.getAs(3))
可以通过集合构建Row
//此方法可用于构造具有给定值的行。
private val row: Row = Row(List("a", "b", "f"))
private val row1: Row = Row(Array(1, 2, 7))
private val row2: Row = Row(Seq(9, 4, 2))
private val session: SparkSession = SparkSession.builder().appName("test").master("local").getOrCreate()
private val df: DataFrame = session.read.json("file:///D:\\data\\emp.json")
private val rows: Array[Row] = df.take(2)
for(x<-rows){
//可以依据fieldneame获取row中对应的值
println(x.getAs("empno"))
//row是可以整行打印的
println(x)
}
执行结果
7369
[null,20,7369,SMITH,1980-12-17,CLERK,7902,800.0]
7499
[300,30,7499,ALLEN,1981-02-20,SALESMAN,7698,1600.5]
DataFrame与DataSet的关系
type DataFrame = Dataset[Row]
总结
- row对象可以整行输出
- row对象中的内容可以利用索引,fieldname进行取值