孙其功陪你学之——Spark 正则化和SparkSQL

本博文程序是读取hadoop的hdfs中的文件,使用正则化解析出规定格式的数据,然后加载到sparkSQL数据库中。

正则化如果不太了解,请看正则表达式30分钟入门教程

文件内容大致为:

CREATE TABLE IF NOT EXISTS `rs_user` (

`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,

`uid` mediumint(8) unsigned DEFAULT NULL,

`url` varchar(255) DEFAULT NULL,

`title` varchar(1024) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB  DEFAULT CHARSET=gbk AUTO_INCREMENT=59573 ;

INSERT INTO `rs_user` (`id`, `uid`, `url`, `title`) VALUES

(1, 269781, ‘http://rs.xidian.edu.cn/forum.php?mod=viewthread&tid=721360‘, ‘[体育][其他][2002年亚运会羽毛球男单决赛 陶菲克vs李炫一][rmvb][国语]‘),

(2, 256188, ‘http://rs.xidian.edu.cn/forum.php?mod=viewthread&tid=721360‘, ‘[体育][其他][2002年亚运会羽毛球男单决赛 陶菲克vs李炫一][rmvb][国语]‘),

package com.spark.firstApp

import org.apache.spark.SparkContext

import org.apache.spark._

import org.apache.log4j.{Level, Logger}

object HelloSpark {

case class Person(id:Int,uid:String,url:String,title:String)

def main(args:Array[String]): Unit = {

Logger.getLogger("org.apache.spark").setLevel(Level.WARN)

Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)//去除log日志

val conf = new SparkConf().setAppName("HelloSpark")

val sc = new SparkContext(conf)

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

import sqlContext.implicits._

val r = """\d*, \d*, ‘http://[a-z/.?&=0-9]*‘, ‘[^‘]+‘""".r

val data=sc.textFile("/user/root/home/rs_user.sql").map(s=>s.mkString).

map(z=>r.findAllIn(z).toList).filter(_.length>0).map(_.head.split(", ").toList)

val people=data.map(p=>Person(p(0).toInt,p(1),p(2),p(3))).toDF()

people.registerTempTable("people")

val teen=sqlContext.sql("SELECT title from people where uid=‘199988‘")

teen.map(t => "title: " + t).collect().foreach(println)

sc.stop()

}

}

提交任务:

[email protected]:/# spark-submit --master spark://192.168.0.10:7077 --class com.spark.firstApp.HelloSpark --executor-memory 100m /root/IdeaProjects/FirstSparkApp/out/artifacts/FirstSparkAppJar/FirstSparkAppJar.jar

输出结果:

Spark assembly has been built with Hive, including Datanucleus jars on classpath

15/04/15 21:53:56 INFO slf4j.Slf4jLogger: Slf4jLogger started

15/04/15 21:53:56 INFO Remoting: Starting remoting

15/04/15 21:53:57 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:52584]

15/04/15 21:53:57 INFO server.Server: jetty-8.y.z-SNAPSHOT

15/04/15 21:53:57 INFO server.AbstractConnector: Started [email protected]:54183

15/04/15 21:54:03 INFO server.Server: jetty-8.y.z-SNAPSHOT

15/04/15 21:54:03 INFO server.AbstractConnector: Started [email protected]:4040

15/04/15 21:54:12 WARN util.SizeEstimator: Failed to check whether UseCompressedOops is set; assuming yes

15/04/15 21:54:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

15/04/15 21:54:21 WARN snappy.LoadSnappy: Snappy native library not loaded

15/04/15 21:54:21 INFO mapred.FileInputFormat: Total input paths to process : 1

title: [‘[其他][视频][LOL][微笑卷毛1月13号双排三场合集][微笑卷毛解说][mp4]‘]

title: [‘[其他][视频][LOL][SMZ24解说:S5盲僧李青的全场gank之旅_高清][SMZ24解说][mp4]‘]

时间: 2024-10-08 02:14:19

孙其功陪你学之——Spark 正则化和SparkSQL的相关文章

孙其功陪你学之——Spark MLlib之K-Means聚类算法

看到 程序员的自我修养 – SelfUp.cn 里面有Spark MLlib之K-Means聚类算法. 但是是java 语言的,于是我按照例程用Scala写了一个,分享在此. 由于在学习 spark mllib 但是如此详细的资料真的很难找,在此分享. 测试数据 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2 15.1 15.1 15.1 18.0 17.0 19.0 20.0 21.0 22.0 p

孙其功陪你学之——重装系统后配置原有的虚拟机

由于系统出现了问题,就一键还原到了刚刚购机时的系统状态,但是其他盘还保留了之前安装的虚拟机Vmware和虚拟机系统.安装好了之后,打开VMware后发现,提示让填写注册码,填写完了,怎么都不成功.准备重新安装,提示:failed to create the requested registry key key installer error 1021.这就是注册表有问题了,新装的系统里对于原来的软件的注册表不一样.那么就,在开始--运行--输入regedit,打开注册表 , 在注册表中找到HKE

孙其功陪你学之——unity3d进程暂停

在做unity3d工程的时候,有时候需要让进程暂停一段时间. 有人建议使用yield return new WaitForSeconds(value);用法如下: IEnumerator Wait(float value) //等待的时间,单位秒 { print(Time.time); yield return new WaitForSeconds(value); print(Time.time); } void Start() { StartCoroutine(Wait(1.0f)); } 但

孙其功陪你学之——ubuntu与windows文件共享

本人安装的是VM虚拟机,在虚拟机安装的是Ubuntu12.10版本.如果想ubuntu与windows文件共享,一般需要先配置虚拟机共享文件. 然后再终端输入:sudo mount -t vmhgfs .host:/ /mnt/hgfs 进入/mnt/hgfs/文件夹,就会看到共享的文件. 如果你不想每次都在终端输入命令,想直接开机之后就自动挂载,可以配置如下: 1.在终端输入命令:sudo gedit /etc/init.d/rc.local,打开rc.local文件,输入:sudo moun

孙其功陪你学——之Kinect开发之结合Unity3D进行游戏应用开发关节对应

Kinect开发之结合Unity3D进行游戏应用开发,使用http://blog.csdn.net/a350203223/article/details/22040119过程进行三维人物控制时,关节点较多,很难配置.楼主配置好了,把配置的过程和各个关节点的对应情况列出,方便感兴趣的人.

孙其功陪你学之——如何将shell命令的返回值赋值给应用程序的变量

如何将shell命令的返回值赋值给应用程序的变量. 博主最近做了个路由器的项目,需要得到路由器现在网络状态和参数,使用UCI get 获得, 但是使用了system("UCI get ****"),之后,获得的参数直接在终端打印输出了,应用程序中无法获得 返回的参数.以下是我的解决方案. #include <stdlib.h> #include <stdio.h> #include <string.h> char buf[512]; char* uc

小康陪你学JAVA--------sort方法对数组进行排序

本篇和大家分享另一种数组的操作的方法——sort方法对数组进行排序. 范例:TestJava4_5.java 01 // 以下程序是数组的排序操作,在这里使用了sort方法对数组进行排序 02 import java.util.*; 03 public class TestJava4_5 04 { 05    public static void main(String[] args) 06  { 07       int a[] = {4,32,45,32,65,32,2} ; 08 09  

小康陪你学JAVA--------数组的介绍

今天小编和大家分享JAVA学习中一个重要的数据类型——数组. 若想要存放一连串相关的数据,使用数组是个相当好用的选择.此外,如果某个程序片段经常反复出现,那么将它定义成一个方法可以有效地简化程序代码.数组是由一组相同类型的变量所组成的数据类型,它们以一个共同的名称表示,数组中的个别元素则以标注来表示其存放的位置. 要使用Java的数组,必须经过两个步骤:(1)声明数组.(2)分配内存给该数组. 这两个步骤的语法如下: 数组的声明格式里,“数据类型”是声明数组元素的数据类型,常见的类型有整型.浮点

小康陪你学JAVA--------continu3和break的比较

本篇将和大家做个continu3和break的比较. 在Java语言中,有一些跳离的语句,如break.continue等语句,站在结构化程序设计的角度上,并不鼓励使用,因为这些跳离语句会增加调试及阅读上的困难.因此建议:除非在某些不得以的情况下之外,否则尽量不要去使用它们.在本篇中,将介绍break及continue语句. break语句 break语句可以强迫程序跳离循环,当程序执行到break语句时,即会离开循环,继续执行循环外的下一个语句,如果break语句出现在嵌套循环中的内层循环,则