测试数据样本形式:
1 上海 273
2 云南 27
3 内蒙古 25
4 北京 627
1编程row的方式,适合事先不知道列的形式
def main(args: Array[String]) {
val spark = SparkSession.builder().appName("DataFrameAPP").master("local[2]").getOrCreate()
val rdd = spark.sparkContext.textFile("F:\\b.csv")
val infoRdd=rdd.map(_.split("\t")).map(line =>Row(line(0).toInt,line(1),line(2).toInt))
val structType = StructType(Array(
StructField("id",IntegerType,true),
StructField("provice",StringType,true),
StructField("num",IntegerType,true)
))
val proviceRdd = spark.createDataFrame(infoRdd,structType)
proviceRdd.show(4,true)
}
2.反射 case class 事先知道字段类型 ,有哪些字段
def main(args: Array[String]) {
val spark = SparkSession.builder().appName("DataFrameAPP").master("local[2]").getOrCreate()
import spark.implicits._
val df =spark.sparkContext.textFile("F:\\b.csv")
.map(_.split("\t")).map(line =>Info(line(0).toInt,line(1),line(2).toInt)).toDF()
df.select(df.col("num")).show(35,true)
df.filter(df.col("num")>50).show()
df.createOrReplaceTempView("infos")
spark.sql("select * from infos where num > 100").show()
spark.stop()
}
case class Info(id:Int,provice:String,num:Int)