scala

pyspark入门

回眸只為那壹抹淺笑 提交于 2020-08-12 03:59:38
python脚本方式执行spark程序,好处是不用编译,写完就走! 示例脚本如下: from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("myTest").setMaster("local") sc = SparkContext(conf=conf) x = [1,2,3] rdd = sc.parallelize(x) count=rdd.count() print("len=",count) # read textfile rdd2=sc.textFile("c:\\spark\\doc\\word.txt") def f(x):return print(x) rdd2.foreach(f) print("rdd2:",rdd2.count()) 保存为"test1.py"文件。然后执行spark-submit test1.py提交执行即可。 pyspark比scala方式要方便多了。 word.txt内容: hello world 1 执行结果: len= 3 hello workd 1 rdd2: 3 来源: oschina 链接: https://my.oschina.net/u/778683/blog/4403693

scala数据结构(一)

穿精又带淫゛_ 提交于 2020-08-12 00:30:31
一、概述 1,特点 1 )Scala同时支持不可变集合和可变集合 2 )两个主要的包: 不可变集合:scala.collection.immutable 可变集合: scala.collection.mutable 3 )Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)和不可变(immutable)的版本 4 )Scala的集合有三大类: 序列Seq、集Set、映射Map ,所有的集合都扩展自Iterable特质,在Scala中集合有 可变(mutable)和不可变(immutable) 两种类型。 2,不可变集合继承一览图 3,可变集合继承一览图 二、数组 1,可变和不可变:   Array ===> ArrayBuffer 2,定义不可变数据数组方式 // 定义数组:方式一 val arr = new Array[Int]( 10 ) // 定义数组:方式二 val arr = Array( 1 , 2 , " scala " ) // 调用apply方法 arr( 1 )= 8 // 赋值,索引1的值为8 // 添加,生成一个新的数组 arr.+:( 4 ) // 删除,删除值为1的元素( 并且只刪除第一个 ) val array: Array[Any] = arr.drop( 1 ) // 改,修改索引1的值为6 arr

spark笔记(二)之RDD常用算子

♀尐吖头ヾ 提交于 2020-08-11 21:42:31
大家好!下面是我在疫情假期期间学习的saprk算子笔记,刚刚用了一下午的时间把它整理出来分享给大家!码字实属不易如果对你有帮助,记得点赞呦! 文章目录 一.spark行动算子 二.spark单value类型 三.spark双value类型 四.spark算子KV类型 一.spark行动算子 1.reduce( f: (T, T) => T ) :通过func函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。 val list1 : RDD [ Int ] = sc . makeRDD ( 1 to 10 ) val reduceRDD : Int = list1 . reduce ( _ + _ ) println ( reduceRDD ) //55 2.collect() :在驱动程序中,以数组的形式返回数据集的所有元素。 val list1 : RDD [ Int ] = sc . parallelize ( List ( 1 , 2 , 3 , 4 , 5 ) ) list1 . collect ( ) . foreach ( println ) 返回值:Array ( 1 , 2 , 3 , 4 , 5 ) 3.count() :返回RDD中元素的个数。 val list1 : RDD [ Int ] = sc . parallelize ( List (

半小时,将你的Spark SQL模型变为在线服务

限于喜欢 提交于 2020-08-11 09:38:32
SparkSQL在机器学习场景中应用 第四范式已经在很多行业落地了上万个AI应用,比如在金融行业的反欺诈,媒体行业的新闻推荐,能源行业管道检测,而SparkSQL在这些AI应用中快速实现特征变换发挥着重要的作用 SparkSQL在特征变换主要有一下几类 多表场景,用于表之间拼接操作,比如交易信息表去拼接账户表 使用udf进行简单的特征变换,比如对时间戳进行hour函数处理 使用时间窗口和udaf进行时序类特征处理,比如计算一个人最近1天的消费金额总和 SparkSQL到目前为止,解决很好的解决离线模型训练特征变换问题,但是随着AI应用的发展,大家对模型的期望不再只是得出离线调研效果,而是在真实的业务场景发挥出价值,而真实的业务场景是模型应用场景,它需要高性能,需要实时推理,这时候我们就会遇到以下问题 多表数据离线到在线怎么映射,即批量训练过程中输入很多表,到在线环境这些表该以什么形式存在,这点也会影响整个系统架构,做得好能够提升效率,做得不好就会大大增加模型产生业务价值的成本 SQL转换成实时执行成本高,因为在线推理需要高性能,而数据科学家可能做出成千上万个特征,每个特征都人肉转换,会大大增加的工程成本 离线特征和在线特征保持一致困难,手动转换就会导致一致性能,而且往往很难一致 离线效果很棒但是在线效果无法满足业务需求 在具体的反欺诈场景,模型应用要求tp99

Scala中对象和类之间的区别

一个人想着一个人 提交于 2020-08-11 08:31:06
问题: I'm just going over some Scala tutorials on the Internet and have noticed in some examples an object is declared at the start of the example. 我刚刚浏览了Internet上的一些Scala教程,并注意到在某些示例中,在示例开始时声明了一个对象。 What is the difference between class and object in Scala? Scala中的 class 和 object 什么区别? 解决方案: 参考一: https://stackoom.com/question/7Me1/Scala中对象和类之间的区别 参考二: https://oldbug.net/q/7Me1/Difference-between-object-and-class-in-Scala 来源: oschina 链接: https://my.oschina.net/u/4438370/blog/4275638

如何在本地调试你的 Spark Job

梦想的初衷 提交于 2020-08-11 07:17:25
生产环境的 Spark Job 都是跑在集群上的,毕竟 Spark 为大数据而生,海量的数据处理必须依靠集群。但是在开发Spark的的时候,不可避免我们要在本地进行一些开发和测试工作,所以如何在本地用好Spark也十分重要,下面给大家分享一些经验。 首先你需要在本机上安装好了Java,Scala和Spark,并配置好了环境变量。详情请参考官方文档或其他教程。 spark-shell 本地运行Spark最直接的方式就是在命令行里面运行spark-shell,成功后你将看到如下信息: 首先可以仔细阅读一下命令行的提示信息, Picked up _JAVA_OPTIONS: -Xmx512M -Xms512M // _JAVA_OPTIONS是我在系统环境变量里面设置的值 Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties // 告诉你log4j使用配置 Setting default log level to "WARN". // log级别 To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). // 如何调整log级别 Spark context

Flink双流操作

痞子三分冷 提交于 2020-08-11 01:57:58
Flink 系列博客 Flink QuickStart Flink双流操作 Flink on Yarn Kerberos的配置 Flink on Yarn部署和任务提交操作 Flink配置Prometheus监控 Flink in docker 部署 Flink HA 部署 Flink 常见调优参数总结 Flink 源码之任务提交流程分析 Flink 源码之基本算子 Flink 源码之Trigger Flink 源码之Evictor 简介 Flink 双数据流转换为单数据流操作的运算有 cogroup , join 和 coflatmap 。下面为大家对比介绍下这3个运算的功能和用法。 Join :只输出条件匹配的元素对。 CoGroup : 除了输出匹配的元素对以外,未能匹配的元素也会输出。 CoFlatMap :没有匹配条件,不进行匹配,分别处理两个流的元素。在此基础上完全可以实现join和cogroup的功能,比他们使用上更加自由。 对于join和cogroup来说,代码结构大致如下: val stream1 = ... val stream2 = ... stream1.join(stream2) .where(_._1).equalTo(_._1) //join的条件stream1中的某个字段和stream2中的字段值相等 .window(...) // 指定window

How does Akka Stream's Keep right/left/both result in a different output?

廉价感情. 提交于 2020-08-10 20:20:26
问题 I am trying to wrap my head around how Keep works in Akka streams. Reading answers in What does Keep in akka stream mean, I understand that it helps to control we get the result from the left/right/both sides of the materializer. However, I still can't build an example were I can change the value of left/right and get different results. For example, implicit val system: ActorSystem = ActorSystem("Playground") implicit val materializer: ActorMaterializer = ActorMaterializer() val

How to create a source to export metrics from Spark to another sink (Prometheus)?

帅比萌擦擦* 提交于 2020-08-10 19:34:10
问题 I am trying to create a source for metrics from my spark application written in Scala to export data to another system, preferable to Prometheus. According to this site from Data bricks I need to create a source that extends the Source trait. However, the Source trait is private[spark] trait Source and my source cannot visualize it. When I create this class I get the error Symbol Source is inaccessible from this place . package org.sense.spark.util import org.apache.spark.metrics.source

Spark structured streaming - Filter Phoenix table by streaming dataset

青春壹個敷衍的年華 提交于 2020-08-10 19:04:06
问题 I am building a Spark structured streaming job that does the below, Streaming source, val small_df = spark.readStream .format("kafka") .load() small_df.createOrReplaceTempView("small_df") A dataframe - Phoenix load val phoenixDF = spark.read.format("org.apache.phoenix.spark") .option("table", "my_table") .option("zkUrl", "zk") .load() phoenixDF.createOrReplaceTempView("phoenix_tbl") Then, spark sql statement to join(on primary_key) with another small dataframe to filter records. val