spark文件、hive、数据库操作

spark2版本
spark2版本后可以使用sparksession代替HiveContext与SQLContext
1、处理CSV文件
val spark=SparkSession.builder().appName(“DataFrameApi”).master(“local”).getOrCreate()
val csvDF=spark.read.format(“com.databricks.spark.csv”).option(“header”, “true”).option(“inferSchema”,“true”).load(“f:\text1.csv”).toDF()
(这里可以采用inferSchema,也可以使用applySchema,applySchema需要定义StructType)
.option(“header”,“true”).load(“f://text1.csv”).toDF())
val num = data.createTempView(“table”)
val resultDF = spark.sql(“select * from table”)
resultDF.show()
(此种展示数据为创建一个临时视图,编写sql,还可使用data.select(data.col(“name”)).show(),api方式)
2、处理json文件
val spark=SparkSession.builder().appName(“DataFrameApi”).master(“local”).getOrCreate()
val jDF=spark.read.format(“json”).load(“f://scala.json”)
展示方式同样有两种:sql方式与api方式
sql: val num = jDF.createTempView(“table”)
val resultDF = spark.sql(“select * from table”)
api方式:jDF.filter(jDF.col(“age”)>45).select(jDF.col(“name”)).show()
3、处理TXT文件
val spark =SparkSession.builder().appName(“DataframeRDDApi”).master(“local”).getOrCreate()
val rdd=spark.sparkContext.textFile(“f://topk.txt”)
val rdd1 = rdd.map{_.split(",")}.map(line=>Row(line(0).toString(),line(1).toInt,line(2).toInt))
val schemadf=StructType(Array(
StructField(“name”,StringType,true),
StructField(“age”,IntegerType,true),
StructField(“class”,IntegerType,true)
))
//将RDD转换为DF(将DF转换为RDD:val srdd=sdf.rdd)
val sdf=spark.createDataFrame(rdd1, schemadf)
sdf.show()
同样存在sql与API展示
4、hive
hive.table()
hive还没做具体了解,等后续更新
5、postgres数据库(MySQL一样,只是driver与url需变更)
val spark=SparkSession.builder().appName(“SparkSessionApp”).master(“local”).getOrCreate()
val encoding = “utf-8”
val filePath = “H:\info.json”
//执行按encoding读取文件,默认是utf-8
val people=spark.read.json(filePath).select(decode(col(“loginFrom”), encoding).as(“loginFrom”))
//处理数据
val rd=people.groupBy(“login”).count().repartition(1)
val url = “jdbc:postgresql://127.0.0.0:5432/dbname”;
val username = “postgres”;
val password = “postgres”;
val prop = new Properties()
prop.setProperty(“driver”, “org.postgresql.Driver”)
prop.setProperty(“user”, username)
prop.setProperty(“password”, password)
//写入数据库
rd.write.mode(SaveMode.Append).jdbc(url, “tablename”, prop)
(读取数据库:也可以不创建properties:
val jdbcDf=spark.read.format(“jdbc”).option(“url”, url).option(“dbtable”, “tablename”).option(“user”, username).option(“password”,password ).option(“driver”, “org.postgresql.Driver”).load())
spark.stop()
6、文件、hive、数据库之间的数据进行join
实质是DF之间的join,因为使用spark操作文件、hive、数据库中的数据时都可以转换成DF
val pgcsvjoin=sqlDf.join(csvDF,sqlDf.col(“name”)===csvDF.col(“name”))
也可以使用select:
pgcsvjoin.select(csvDF.col(“name”), csvDF.col(“age”),sqlDf.col(“id”),sqlDf.col(“num”)).show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值