package cn.spark.study.dataFramecore

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.StructField
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.DataFrame

object UDF {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("UDF")
.setMaster("local");
val sc = new SparkContext(conf);
val sqlContext = new SQLContext(sc);
//构造模拟数据
val array = Array("Leo","Marry","Jack","Tom")
val dataRDD = sc.parallelize(array, 1);
val dataRDD_Row = dataRDD.map { date => Row(date) }
val structType = StructType(Array(StructField("name",StringType,true)))
val date_row = sqlContext.createDataFrame(dataRDD_Row, structType);
date_row.registerTempTable("array_date");
sqlContext.udf.register("strlen",(str:String)=>str.length());
//此处name不能换成* spark不可识别
sqlContext.sql("select strlen(name) from array_date").collect().foreach { date => print(date) };

}
}