
Learning Spark
lzw2016
年轻出来浪!
展开
-
LearningSpark(1):数据来源
数据源自并行集合调用 SparkContext 的 parallelize 方法,在一个已经存在的 Scala 集合上创建一个 Seq 对象外部数据源Spark支持任何 Hadoop InputFormat 格式的输入,如本地文件、HDFS上的文件、Hive表、HBase上的数据、Amazon S3、Hypertable等,以上都可以用来创建RDD。常用函数是 sc.textFile() ...原创 2019-03-06 09:52:28 · 298 阅读 · 0 评论 -
Spark中如何向已存在Schema新增StructFields
向已有的Schema新增StructFields就是StructType的add方法,实际业务中需要动态向DataFrame中新增列时,可以获取最新的配置然后动态更新Schema/** * Creates a new [[StructType]] by adding a new field with no metadata. * * val struct = (new StructTyp...原创 2019-08-08 17:07:24 · 2427 阅读 · 2 评论 -
Spark2.4.0和Scala2.11集成Kudu1.8.0遇到的坑
最近做实时数仓用到了spark和kudu两个组件,因为资料少得可怜,折腾了一番终于是搞定了,在这里记录下期间遇到的坑依赖选择参考kudu官网:https://kudu.apache.org/docs/developing.html#_kudu_integration_with_spark官网上提及了几点关键信息Use the kudu-spark_2.10 artifact if us...原创 2019-08-08 16:24:43 · 1620 阅读 · 0 评论 -
MapReduce、Hive、Spark中数据倾斜问题解决归纳总结
数据倾斜是什么总的来说,你集群运行时发现MR或者Hive卡在99%不动时,或者Spark运行时出现OOM异常(OutOfMemoryError),或者成功执行但就是耗时过久时,既要考虑是否出现了数据倾斜。数据倾斜就是某些key对应的数据分化不均,导致部分reduce处理数据量过大,以至于其他reduce都执行完了它还在运行。查看web UI、日志文件:看是否出现map和reduce任务执行...原创 2019-04-13 16:05:14 · 1538 阅读 · 0 评论 -
eclipse如何导入Spark源码方便阅读
最近想看下spark sql的源码,就查了些相关文章。很多都是IDEA怎么导入的,还有就是谈到了自己编译spark源码再倒入,但我还没有强到修改源码的地步,所以跳过编译直接导入阅读源码,过程如下下载spark源码从 https://github.com/apache/spark 下载你需要的spark版本,如图当然,也方便eclipse中 Ctrl+点击 来跳转到源码查看。具体是Atta...原创 2019-03-09 21:00:35 · 1350 阅读 · 0 评论 -
Spark使用JDBC将DataFrame数据写入mysql
spark foreachPartition 把df 数据插入到mysql转载自:http://www.waitingfy.com/archives/4370,确实写的不错import java.sql.{Connection, DriverManager, PreparedStatement} import org.apache.spark.sql.SparkSessionimpo...原创 2019-03-09 20:57:03 · 3808 阅读 · 1 评论 -
Spark2.4+Hive使用现有Hive仓库中的数据
使用前准备hive-site.xml复制到$SPARK_HOME/conf目录下hive连接mysql的jar包(mysql-connector-java-8.0.13.jar)也要复制到$SPARK_HOME/jars目录下或者在spark-submit脚本中通过–jars指明该jar包位置或者在spark-env.xml中把该jar包位置加入Class Path export SP...原创 2019-03-06 10:03:24 · 2753 阅读 · 0 评论 -
Spark DataFrame如何更改列column的类型
如下示例,通过最初json文件所生成的df的age列是Long类型,给它改成其他类型。当然不止如下两种方法,但我觉得这是最为简单的两种了val spark = SparkSession.builder().master("local").appName("DataFrame API").getOrCreate()// 读取spark项目中example中带的几个示例数据,创建DataF...原创 2019-03-06 10:01:43 · 15538 阅读 · 0 评论 -
LearningSpark(9):解析SparkSQL的数据来源(parquet、json、csv、jdbc等)
以下源码在 org.apache.spark.sql.DataFrameReader/DataFrameWriter中format指定内置数据源无论是load还是save都可以手动指定用来操作的数据源类型,format方法,通过eclipse查看相关源码,spark内置支持的数据源包括parquet(默认)、json、csv、text(文本文件)、 jdbc、orc,如图def for...原创 2019-03-06 10:01:01 · 506 阅读 · 0 评论 -
LearningSpark(8):RDD如何转化为DataFrame
为啥要转换?DataFrame可以借助sql语句处理,简单快捷。向hdfs的数据只能创建RDD,转化为DataFrame后就可以使用SQL进行查询方法方法一:基于反射推断适合已知RDD的 Schema ,这个基于方法的反射可以让你的代码更简洁。其通过Case class 定义了表的 Schema。Case class 的参数名使用反射读取并且成为了列名。Case class 也可以是嵌套的...原创 2019-03-06 09:58:42 · 1170 阅读 · 0 评论 -
LearningSpark(7):SparkSQL创建及DataFrame学习
DataFrame说白了就是RDD+Schema(元数据信息),spark1.3之前还叫SchemaRDD,以列的形式组织的分布式的数据集合Spark-SQL 可以以 RDD 对象、Parquet 文件、JSON 文件、Hive 表,以及通过JDBC连接到其他关系型数据库表作为数据源来生成DataFrame对象如何创建Spark SQL的入口同Spark Core要先创建SparkCont...原创 2019-03-06 09:58:08 · 254 阅读 · 0 评论 -
LearningSpark(5):Spark共享变量理解
共享变量Spark又一重要特性————共享变量worker节点中每个Executor会有多个task任务,而算子调用函数要使用外部变量时,默认会每个task拷贝一份变量。这就导致如果该变量很大时网络传输、占用的内存空间也会很大,所以就有了 共享变量。每个节点拷贝一份该变量,节点上task共享这份变量spark提过两种共享变量:Broadcast Variable(广播变量),Accumula...原创 2019-03-06 09:56:39 · 229 阅读 · 0 评论 -
LearningSpark(4):Spark持久化操作
持久化Spark的一个重要特性,对RDD持久化操作时每个节点将RDD中的分区持久化到内存(或磁盘)上,之后的对该RDD反复操作过程中不需要重新计算该RDD,而是直接从内存中调用已缓存的分区即可。当然,持久化适用于将要多次计算反复调用的RDD。不然的话会出现RDD重复计算,浪费资源降低性能的情况巧妙使用RDD持久化,甚至在某些场景下,可以将spark应用程序的性能提升10倍。对于迭代式算法和...原创 2019-03-06 09:55:53 · 538 阅读 · 0 评论 -
LearningSpark(3):常用RDD操作
键值对RDD上的操作 隐式转换shuffle操作中常用针对某个key对一组数据进行操作,比如说groupByKey、reduceByKey这类PairRDDFunctions中需要启用Spark的隐式转换,scala就会自动地包装成元组 RDD。导入 org.apache.spark.SparkContext._即可没啥意思,就是记着导入import org.apache.spark.Spar...原创 2019-03-06 09:55:07 · 324 阅读 · 0 评论 -
LearningSpark(2):spark-submit脚本和可选参数
提交应用的脚本和可选参数可以选择local模式下运行来测试程序,但要是在集群上运行还需要通过spark-submit脚本来完成。官方文档上的示例是这样写的(其中表明哪些是必要参数):./bin/spark-submit \ --class <main-class> \ --master <master-url> \ --deploy-mode <dep...原创 2019-03-06 09:54:10 · 668 阅读 · 0 评论 -
Structured Streaming中如何通过schema_of_json方法动态解析Kafka传入的JSON数据的Schema
Structured Streaming中如何解析Kafka传入的JSON数据的Schema在实际生产中消息中的字段可能会发生变化,比如多加一个字段什么的,但是Spark程序又不能停下来,所以考虑在程序中不是自定义好Schema,而是通过Kafka输入消息中json串来infer Schema。当然,也可以通过广播变量来更新配置文件,定期更新Schema,这也是一种写法在之前Spark Str...原创 2019-08-09 14:39:35 · 2994 阅读 · 0 评论