73. [Spark]将Spark DataFrame中的数值取出
有时候经过Spark SQL计算得到的结果往往就一行,而且需要将该结果取出,作为字符串参与别的代码块的判断条件,所以就需要将DF中的一行数据取出并且转换为String,下面探讨的是用一些办法实现该需求,分别有java和scala实现。
73.1. Java代码
使用DF的takeAsList方法或者先转换为JavaRDD再使用collect方法
@Test
public void collectTest(){
SparkSession spark = SparkSession.builder()
.master("local[2]")
.getOrCreate();
//转换为list,里面为rows,取出第一个row再取出值为String
Dataset<Row> df = spark.sql("SELECT 'AHA' AS TEXT");
List<Row> rows = df.takeAsList(1);
System.out.println(rows.get(0).getString(0));
//转换为javaRDD,再取出第一个row再取出值为String
List<Row> collect = df.javaRDD().collect();
String string = collect.get(0).getString(0);
System.out.println(string);
spark.stop();
73.2. Scala代码
举个栗子🌰,以下方法直接使用collect方法
def isWorkDay(sparkSession: SparkSession, properties: Properties, date: String): Boolean = {
val result = sparkSession.sql(
s"""
|select case date_type when 0 then true else false end
|from 日期表
|""".stripMargin).collect()
if (result.length == 0) {
true
} else {
result(0).getBoolean(0)
}
}