设为首页 收藏本站
查看: 1851|回复: 0

[经验分享] 大数据spark计算引擎快速入门

[复制链接]

尚未签到

发表于 2019-1-30 14:08:05 | 显示全部楼层 |阅读模式

  spark快速入门
    spark框架是用scala写的,运行在Java虚拟机(JVM)上。支持Python、Java、Scala或R多种语言编写客户端应用。
  下载Spark
    访问http://spark.apache.org/downloads.html
  选择预编译的版本进行下载。
  解压Spark
    打开终端,将工作路径转到下载的spark压缩包所在的目录,然后解压压缩包。 可使用如下命令: cd ~ tar -xf spark-2.2.2-bin-hadoop2.7.tgz -C /opt/module/ cd spark-2.2.2-bin-hadoop2.7 ls   注:tar命令中x标记指定tar命令执行解压缩操作,f标记指定压缩包的文件名。
  spark主要目录结构
  README.md
    包含用来入门spark的简单使用说明 - bin
    包含可用来和spark进行各种方式交互的一系列可执行文件 - core、streaming、python
    包含spark项目主要组件的源代码 - examples
    包含一些可查看和运行的spark程序,对学习spark的API非常有帮助
  运行案例及交互式Shell
  运行案例
  ./bin/run-example SparkPi 10
  scala shell
  ``` ./bin/spark-shell --master local[2]

--master选项指定运行模式。local是指使用一个线程本地运行;local[N]是指使用N个线程本地运行。 ```
  python shell
  ./bin/pyspark --master local[2]
  R shell
  ./bin/sparkR --master local[2]
  提交应用脚本
  

**支持多种语言提交**  
./bin/spark-submit examples/src/main/python/pi.py 10 ./bin/spark-submit examples/src/main/r/dataframe.R ... ```
  
**使用spark shell进行交互式分析**
  
scala
  
  使用spark-shell脚本进行交互式分析。
  
基础
  
``` scala> val textFile = spark.read.textFile("README.md") textFile: org.apache.spark.sql.Dataset[String] = [value: string]
  
scala> textFile.count() // Number of items in this Dataset res0: Long = 126 // May be different from yours as README.md will change over time, similar to other outputs
  
scala> textFile.first() // First item in this Dataset res1: String = # Apache Spark
  
使用filter算子返回原DataSet的子集
  
scala> val linesWithSpark = textFile.filter(line => line.contains("Spark")) linesWithSpark: org.apache.spark.sql.Dataset[String] = [value: string]
  
拉链方式
  
scala> textFile.filter(line => line.contains("Spark")).count() // How many lines contain "Spark"? res3: Long = 15 ```
  
进阶
  

  使用DataSet的转换和动作查找最多单词的行
  scala> textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b) res4: Long = 15 ```
  

统计单词个数  
scala> val wordCounts = textFile.flatMap(line => line.split(" ")).groupByKey(identity).count() wordCounts: org.apache.spark.sql.Dataset[(String, Long)] = [value: string, count(1): bigint]
  
scala> wordCounts.collect() res6: Array[(String, Int)] = Array((means,1), (under,2), (this,3), (Because,1), (Python,2), (agree,1), (cluster.,1), ...) ```
  
python
  
  使用pyspark脚本进行交互式分析
  
基础
  

  textFile = spark.read.text("README.md")
  textFile.count() # Number of rows in this DataFrame 126
  textFile.first() # First row in this DataFrame Row(value=u'# Apache Spark')
  filter过滤
  linesWithSpark = textFile.filter(textFile.value.contains("Spark"))
  拉链方式
  textFile.filter(textFile.value.contains("Spark")).count() # How many lines contain "Spark"? 15 ```
  进阶
  

查找最多单词的行  
from pyspark.sql.functions import *
  

  
textFile.select(size(split(textFile.value, "\s+")).name("numWords")).agg(max(col("numWords"))).collect() [Row(max(numWords)=15)]
  
统计单词个数
  
wordCounts = textFile.select(explode(split(textFile.value, "\s+")).alias("word")).groupBy("word").count()
  

  
wordCounts.collect() [Row(word=u'online', count=1), Row(word=u'graphs', count=1), ...] ```
  
独立应用
  
  spark除了交互式运行之外,spark也可以在Java、Scala或Python的独立程序中被连接使用。   独立应用与shell的主要区别在于需要自行初始化SparkContext。
  
scala
  
分别统计包含单词a和单词b的行数
  
``` /* SimpleApp.scala */ import org.apache.spark.sql.SparkSession
  
object SimpleApp { def main(args: Array[String]) { val logFile = "YOURSPARKHOME/README.md" // Should be some file on your system val spark = SparkSession.builder.appName("Simple Application").getOrCreate() val logData = spark.read.textFile(logFile).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println(s"Lines with a: $numAs, Lines with b: $numBs") spark.stop() } } ``` 运行应用
  

  Use spark-submit to run your application
  $ YOURSPARKHOME/bin/spark-submit \ --class "SimpleApp" \ --master local[4] \ target/scala-2.11/simple-project_2.11-1.0.jar ... Lines with a: 46, Lines with b: 23 java分别统计包含单词a和单词b的行数 / SimpleApp.java / import org.apache.spark.sql.SparkSession; import org.apache.spark.sql.Dataset;

  public>  long numAs = logData.filter(s -> s.contains("a")).count();
  long numBs = logData.filter(s -> s.contains("b")).count();
  System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
  spark.stop();
  } } ``` 运行应用
  

Use spark-submit to run your application  
$ YOURSPARKHOME/bin/spark-submit \ --class "SimpleApp" \ --master local[4] \ target/simple-project-1.0.jar ... Lines with a: 46, Lines with b: 23 ```
  
python
  
分别统计包含单词a和单词b的行数
  
setup.py脚本添加内容 install_requires=[ 'pyspark=={site.SPARK_VERSION}' ]
  
``` """SimpleApp.py""" from pyspark.sql import SparkSession
  
logFile = "YOURSPARKHOME/README.md" # Should be some file on your system spark = SparkSession.builder().appName(appName).master(master).getOrCreate() logData = spark.read.text(logFile).cache()
  
numAs = logData.filter(logData.value.contains('a')).count() numBs = logData.filter(logData.value.contains('b')).count()
  
print("Lines with a: %i, lines with b: %i" % (numAs, numBs))
  
spark.stop() ``` 运行应用
  

  Use spark-submit to run your application
  $ YOURSPARKHOME/bin/spark-submit \ --master local[4] \ SimpleApp.py ... Lines with a: 46, Lines with b: 23 ```
  文章来自:https://www.itjmd.com/news/show-4240.html



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669697-1-1.html 上篇帖子: 个推 Spark实践教你绕过开发那些“坑” 下篇帖子: 大数据学习系列之八
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表