Spark RDDRelation
package main.asiainfo.coc.sparksql import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} case class Record(key: Int, value: String) object RDDRelation { def main(args: Array[String]) { val sparkConf = new SparkConf().setAppName("RDDRelation").setMaster("local") val sc = new SparkContext(sparkConf) val sqlContext = new SQLContext(sc)
//引入SQL context 提供所有的SQL 与 隐式转换方法
import sqlContext.implicits._ //生成1到100的数字,并做成key value形式的DateFrame
val df = sc.parallelize((1 to 100).map(i => Record(i, s"val_$i"))).toDF() //df: "[key:int, value : String]" // 将DF做成以case class的临时表 L df.registerTempTable("records") // 随后便可以调用sqlContext查询这个临时表 println("Result of SELECT *:") sqlContext.sql("SELECT * FROM records").collect().foreach(println) // 聚合查询 val count = sqlContext.sql("SELECT COUNT(*) FROM records").collect().head.getLong(0) //count: 100 println(s"COUNT(*): $count") // 查询的结果是一个普通的RDD,所以可以根据条件筛选你想要的数据哪一列数据 val rddFromSql = sqlContext.sql("SELECT key, value FROM records WHERE key < 10") //rddFromSql:"[key : int, value String]" println("Result of RDD.map:") rddFromSql.map(row => s"Key: ${row(0)}, Value: ${row(1)}").collect().foreach(println) df.where($"key" === 1).orderBy($"value".asc).select($"key").collect().foreach(println) // 将文件存成parquet格式 df.write.parquet("pair.parquet") // 读取parquet格式文件 val parquetFile = sqlContext.read.parquet("pair.parquet") parquetFile.where($"key" === 1).select($"value".as("a")).collect().foreach(println) // parquetFile也可以做成临时表 parquetFile.registerTempTable("parquetFile") sqlContext.sql("SELECT * FROM parquetFile").collect().foreach(println) sc.stop() } }
注意 这里声明的是 sqlContext = new SQLContext(sc) 如果要存成hive 表 需用hivecontext.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
spark MapOutputTrackerMaster
最近用了一个RowNumber() over()函数 进行三张4000万数据的关联筛选,建表语句如下: create table CiCustomerPortrait2 as SELECT ROW_NUMBER() OVER() as id,* from (select t_7.phone_no,t_7.L1301,t_7.L1431,t_7.L1449,t_7.L1489,t_8.L1713,t_92.L1879,t_92.L1907 from DW_COC_LABEL_INTERNET_D_20151123 t_7 inner join DW_COC_LABEL_INTERNET_M_201510 t_8 on t_7.phone_no = t_8.phone_no inner join DW_COC_LABEL_BITEMP_M_201510 t_92 on t_7.phone_no = t_92.phone_no ) a 一方面由于多表关联(每个表4000W以上数据)一方面窗口函数的原因异常吃内存。 spark-env.sh参数如下:(default我就不贴了) 给了18个e...
- 下一篇
Kmeans算法学习与SparkMlLib Kmeans算法尝试
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。该算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。 算法描述: 假设要把样本集分为c个类别,算法描述如下: (1)适当选择c个类的初始中心; (2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类; (3)利用均值等方法更新该类的中心值; (4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。 该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。 ,暂且抛开原始数据是什么形式,假设我们已经将其映射到了一个欧几里德空间上,映射到欧几里得空间上,样例: 从数据点的大致形状可...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS6,CentOS7官方镜像安装Oracle11G
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作