scala

Flink实战,APP推广情况分析

拈花ヽ惹草 提交于 2021-01-12 14:42:28
接着 https://blog.51cto.com/mapengfei/2581240 这里用Flink来实现对APP在每个渠道的推广情况包括下载、查看、卸载等等行为的分析 因为之前的文章都是用scala写的,这篇用纯java来实现一波, 分别演示下用aggregate 聚合方式和process 方式的实现和效果 整体思路 1、准备好数据源: 这里用SimulatedSource 来自己随机造一批数据 2、准备数据输入样例 `MarketUserBehavior` 和输出样例`MarketViewCountResult` 3、准备环境并设置watermark时间,和指定事件时间字段为timestamp 4、进行过滤:uninstall 的行为过滤掉(根据实际情况来改) 5、根据行为和渠道进行KeyBy统计 6、设置滑动窗口1小时,每10s输出一次 7、进行聚合输出 /** * @author mafei * @date 2021/1/9 */ package com.mafei.market; import cn.hutool.core.util.RandomUtil; import org.apache.flink.api.common.functions.AggregateFunction; import org.apache.flink.api.common

java和python的比较

夙愿已清 提交于 2021-01-10 08:50:37
  1.   在实际运用的python入门简略,但要学会用python干活,需求再学习python各种库,pyhton的强壮在于库,为什么python的库强壮,原因是python的库能够用python,c言语,c++等规划,再提供给python运用,所以无论gpu运转,神经网络,智能算法,数据剖析,图像处理,科学核算,林林总总的库在等着你用。而java没有python那么多的开源库,很多库是商业公司内部运用,或发布出来只是一个jar包,看不到原始代码。python虚拟机由于编译性没有java的支撑的好(或者说成心这么规划的),一般直接运用源码(linux),或源码简略打个包(如pyexe)。   2.   python用处最多的是脚本,java用处最多的是web,pyhotn是胶水,能够把各类不相关的东西粘在一重用,java是基佬,能够经过软件工程组成几百个人的团队和你pk,商业化气息重。不过我以为仍是python强壮,由于能够便利调用c或c++的库,但软件工程和商业化运作没有java好,合适快捷开发。   3.   假如你想写程序卖软件用java,可用上ibm服务器,上oracle数据库,上EMC存储,价格高,商业采购公司喜欢这种高大上。假如你要直接用程序生成金钱用python,python能够实现宽客金融,数据回测,炒股,炒期权,炒黄金,炒比特币,对冲套利,统计套利

Spark集群搭建

三世轮回 提交于 2021-01-10 07:24:50
一、前提 1、安装hadoop集群 2、安装scala 3、假设三个节点:master、slave1、slave2 二、Spark集群搭建 1、建立文件夹存放spark压缩包 2、在本文件夹下解压 3、将解压得到的文件夹名重命名 语言 方法 7755 ebbg8K93h4 qaY7t 最挣钱没人干的行业 9427 2012.04.15 20-35-29 4、进入spark-2.20\conf文件夹,修改spark-env.sh.template为spark-env.sh 5、在spark-env.sh中添加以下内容: export JAVA_HOME=/opt/softWare/java/jdk1.8.0_141 export SCALA_HOME=/opt/software/scala/scala-2.12.4 export HADOOP_HOME=/opt/software/hadoop/hadoop-2.7.3 export HADOOP_CONF_DIR=/opt/softWare/hadoop/hadoop-2.7.3/etc/hadoop export SPARK_MASTER_IP=192.168.XXX.XX #export SPARK_WORKER_INSTANCES=1 //每个Slave中启动几个Worker实例 export SPARK_WORKER

RDD的五大特点

让人想犯罪 __ 提交于 2021-01-08 20:15:48
1.RDD的官网定义 A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel. 翻译: 弹性分布式数据集(RDD),Spark中的基本抽象。表示不可变的,分区的可以并行操作的元素集合。 解释: RDD是Resilient Distributed Dataset(弹性分布式数据集)的简称。RDD的弹性体现在计算方面,当Spark进行计算时,某一阶段出现数据丢失或者故障,可以通过RDD的血缘关系就行修复。 1、内存的弹性:内存与磁盘的自动切换 2、容错的弹性:数据丢失可以自动恢复 3、计算的弹性:计算出错重试机制 4、分片的弹性:根据需要重新分片 RDD是不可变(immutable)的,一旦创建就不可改变。RDDA-->RDDB,RDDA经过转换操作变成RDDB,这两个RDD具有血缘关系,但是是两个不同的RDD,体现了RDD一旦创建就不可变的性质。 RDD源码 abstract class RDD [ T: ClassTag ] ( @transient private var _sc: SparkContext,

Java日志框架中真的需要判断log.isDebugEnabled()

旧时模样 提交于 2021-01-08 16:07:17
转载: https://blog.csdn.net/neosmith/article/details/50100061 2020博客地址汇总 2019年博客汇总 很多人在使用日志框架时进行 debug() 输出时都会先判断一下当前的日志级别,如: if (log.isDebugEnabled()) { log.debug(... ...); } 实际上,在多数时候这是不必要的。 为什么要提前判断? 在N久以前,很多日志框架都不支持 {} 模板的写法(如 Log4j1.X , Apache Commons Logging ),于是只能通过字符串拼接来输出日志内容: log.debug("hello, this is " + name); 这样一来,每当JVM执行到此时,不管你当前的日志级别是多少,都会执行一次字符串拼接,然后将结果做为形参传递给 debug() 方法,这样就带来了无用的性能损耗。这时,提前判断 isDebugEnabled() 可以解决此问题: if (log.isDebugEnabled()) { log.debug("hello, this is " + name); } 这样写的好处有二: 当日志级别在 DEBUG 以下时, log.debug("hello, this is " + name) 就不会执行,从而没有字符串拼接的开销。 JIT在运行时会优化 if

Scala: Traversable foreach definition

☆樱花仙子☆ 提交于 2021-01-08 06:29:33
问题 I suppose foreach method in Traversable trait is defined as follows: def foreach[U](f: Elem => U) Should it be defined as foreach[U,Elem](f:Elem =>U) as there are two types, Elem and U ? 回答1: foreach[U](A => U) is a method in the trait Traversable[+A] . trait Traversable[+A] extends TraversableLike[A, ...] { ... } trait TraversableLike[+A, ...] extends ... { ... def foreach[U](f: A => U): Unit ... } https://github.com/scala/scala/blob/2.12.x/src/library/scala/collection/TraversableLike.scala

Play Framework 2.8.2 - No Json serializer found for type (subclass)

老子叫甜甜 提交于 2021-01-07 05:58:26
问题 I'm migrating some of my services from Play 2.7.x to the newest 2.8.2, together with scala 2.13.2 and sbt 1.3.12. I'm hitting an obstacle with the play-json though, and the Reads[A] I have the following setup: sealed trait Charge {} case class ChargeOne(one: Int) extends Charge case class ChargeTwo(two: Int) extends Charge object Charge { implicit val writes: Writes[Charge] = (charge: Charge) => {...} } We have some tests looking like so val chargeOne = ChargeOne(1) val json = Json.toJson

Spark optimization - joins - very low number of task - OOM

蓝咒 提交于 2021-01-07 03:59:30
问题 My spark application fail with this error : Exit status: 143. Diagnostics: Container killed on request. Exit code is 143 This is what i get when I inspect the containger log : java.lang.OutOfMemoryError: Java heap space My application is mainly get a table then join differents tables that i read from aws S3: var result = readParquet(table1) val table2 = readParquet(table2) result = result.join(table2 , result(primaryKey) === table2(foreignKey)) val table3 = readParquet(table3) result = result

Apache Spark SQL get_json_object java.lang.String cannot be cast to org.apache.spark.unsafe.types.UTF8String

别说谁变了你拦得住时间么 提交于 2021-01-07 03:38:30
问题 I am trying to read a json stream from an MQTT broker in Apache Spark with structured streaming, read some properties of an incoming json and output them to the console. My code looks like that: val spark = SparkSession .builder() .appName("BahirStructuredStreaming") .master("local[*]") .getOrCreate() import spark.implicits._ val topic = "temp" val brokerUrl = "tcp://localhost:1883" val lines = spark.readStream .format("org.apache.bahir.sql.streaming.mqtt.MQTTStreamSourceProvider") .option(

Apache Spark SQL get_json_object java.lang.String cannot be cast to org.apache.spark.unsafe.types.UTF8String

左心房为你撑大大i 提交于 2021-01-07 03:38:27
问题 I am trying to read a json stream from an MQTT broker in Apache Spark with structured streaming, read some properties of an incoming json and output them to the console. My code looks like that: val spark = SparkSession .builder() .appName("BahirStructuredStreaming") .master("local[*]") .getOrCreate() import spark.implicits._ val topic = "temp" val brokerUrl = "tcp://localhost:1883" val lines = spark.readStream .format("org.apache.bahir.sql.streaming.mqtt.MQTTStreamSourceProvider") .option(