Spark数据读取和创建

spark读取mongodb数据 val spark = SparkSession.builder .appName(this.getClass.getName().stripSuffix("$")) .getOrCreate() val df = spark.read.format("com.mongodb.spark.sql").options( Map 阅读详情

ss表示sparksession
sc表示sparkContext

//Spark 配置代码(2.0 之前的版本):
import org.apache.spark._
 val conf = new SparkConf().setAppName("applicationName").setMaster("local") // 本地环境运行
 val sc = new SparkContext(conf)
 val sq= new org.apache.spark.sql.SQLContext(sc)

//2.0之后
import org.apache.spark.sql.SparkSession
val ss = SparkSession.builder().enableHiveSupport().getOrCreate()
val sc = ss.sparkContext
val sq=ss.sqlContext

从简单数据创建

创建rdd
//parallelize[T](seq : scala.Seq[T], numSlices : scala.Int): RDD[T] = { /* compiled code */ }
//numSlices 为分区数,如果不填,Spark会尝试根据集群的状况,来自动设定slices的数目
val ar=Array( (8, "bat"),(64, "mouse"),(-27, "horse"))
 val r1=sc.parallelize(ar)
创建dataframe
//引入隐式转换,使toDF()函数生效
import sq.implicits._

//从Seq创建
val someDF = ar.toSeq.toDF("number", "word")

//从RDD创建
r1.toDF()

//RDD+case class创建,这种方法的好处在于可以指定数据类型
// Define the schema using a case class.
// Note: Case classes in Scala 2.10 can support only up to 22 fields. To work around this limit,
// you can use custom classes that implement the Product interface.
case class Book(word: String, number: Int)
// Create an RDD of Person objects and register it as a table.
val people = r1.map(p => Book(p(0), p(1)))//转为元素为Person的RDD
                 .toDF()//转换为Dataframe

通过 creatDataFrame()函数创建,主要好处在于可定制schema,包括nullable标志

creatDataFrame()共有7种重载方式:

def createDataFrame[A<: scala.Product](rdd : RDD[A]):DataFrame
def createDataFrame[A<: scala.Product](data : scala.Seq[A]): DataFrame 
//多了一个StructType参数指定Schema,要求输入为RDD[Row]
def createDataFrame(rowRDD : RDD[Row], schema : StructType) : DataFrame
//另外还有以下几种方法,少用,省略。
private[sql] def createDataFrame(rowRDD : org.apache.spark.rdd.RDD[org.apache.spark.sql.Row], schema : StructType, needsConversion : scala.Boolean) : DataFrame 
def createDataFrame(rowRDD : JavaRDD[Row], schema : StructType) : DataFrame
def createDataFrame(rdd : RDD[_], beanClass : scala.Predef.Class[_]) :DataFrame 
def createDataFrame(rdd : JavaRDD[_], beanClass : scala.Predef.Class[_]) :DataFrame

示例:

val someData = Seq(
  Row(8, "bat"),
  Row(64, "mouse"),
  Row(-27, "horse")
)

val someSchema = List(
  StructField("number", IntegerType, true),
  StructField("word", StringType, true)
)

val someDF = spark.createDataFrame(
  spark.sparkContext.parallelize(someData),
  StructType(someSchema)
)

df的schema展示:

df.printSchema()
df.schema.printTreeString() //等效

关于scala.product

从外部数据创建

创建rdd
/**
   * Read a text file from HDFS, a local file system (available on all nodes), or any
   * Hadoop-supported file system URI, and return it as an RDD of Strings.
   */
  def textFile(path: String,minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
    assertNotStopped()
    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],minPartitions).map(pair => pair._2.toString).setName(path)
  }

分析参数:
path: String 是一个URI,這个URI可以是HDFS、本地文件(全部的节点都可以),或者其他Hadoop支持的文件系统URI返回的是一个字符串类型的RDD,也就是是RDD的内部形式是Iterator[(String)]
minPartitions= math.min(defaultParallelism, 2) 是指定数据的分区,如果不指定分区,当你的核数大于2的时候,不指定分区数那么就是 2。当你的数据大于128M时候,Spark是为每一个快(block)创建一个分片(Hadoop-2.X之后为128M一个block)

val rdd = sc.textFile(“/home/hadoop/data.txt”)

//SparkSession版本 Spark 2.0及以上
val dataRDD1 = ss.read.csv("path/of/csv/file").rdd //读取csv 文件
val dataRDD2 = ss.read.json("path/of/json/file").rdd //读取json 文件
val dataRDD3 = ss.read.textFile("path/of/text/file").rdd//读取text文件
创建DataFrame

官方详解read

//SparkSession版本 Spark 2.0及以上
val df1 = ss.read.csv("path/of/csv/file")//读取csv 文件
val df2 = ss.read.json("path/of/json/file")//读取json 文件
val df3 = ss.read.textFile("path/of/text/file")//读取text文件
【大数据入门核心技术-Spark】(二十二)Spark实现从CSV文件读取清单实现批量创建表和数据迁移 本文介绍了一个基于Spark的批量数据表创建与并发迁移实现方案。项目使用Spark 3.1.3和Scala 2.12构建,通过CSVProcessorService类提供两种核心功能:1) 从CSV配置生成建表SQL(WHERE 1=2创建空表结构);2) 生成数据迁移SQL(INSERT OVERWRITE)。方案支持通过CSV文件配置源/目标库表信息,利用Guava实现并发处理,Maven构建时使用shade插件打包。该实现适用于需要批量处理多表迁移的场景,通过Spark分布式计算能力提升效率。 阅读详情

相关推荐

从零到一:基于PX4+Gazebo+ROS2的无人机轨迹跟踪仿真环境全栈搭建

本文详细介绍了在Ubuntu 22.04系统上,从零开始搭建基于PX4、Gazebo Garden和ROS2 Humble的无人机轨迹跟踪仿真环境的完整流程。内容涵盖PX4 SITL编译、Gazebo安装、ROS2配置、Micro XRCE-DDS Agent通信桥接以及QGroundControl地面站部署,并提供了创建自定义ROS2节点实现圆形轨迹跟踪的实战代码与关键调试技巧,帮助开发者快速构建全栈仿真开发环境。

swift5iosmith的博客 921

Spark官方简述

Spark是一种分布式的计算框架,可以处理海量数据,目前流行的计算框架 MapReduce:适用于离线批处理,也可以用于实时计算 Storm: 用于实时计算 Spark:即可以用于离线批处理,也可以用于实时计算 Flink:主要用于实时计算 综上,我们发现MapReduce计算框架是一种高度依赖于磁盘I/O框架,而且在有些业务场景下,比如某算法(梯度下降法,逻辑回归)会多次用到前写job的结...

weixin_39868387的博客 892

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网 拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免 发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

兰亭风雨的专栏 1万+

spark代码sc统一配置

之前写了两篇关于mlib的应用,其实都是在一个project内的,在创建sc的过程中,可以通过继承统一的trait简化sc的创建。val postgprop = new Properties val path = this.getClass.getResourceAsStream("/config.properties")读取相关配置文件key.name=value jdbcURL=jdbc:m

wangkai198911的博客 2039

有了网段为什么还要有VLAN???

近几日,在学习VLAN及VXLAN方面的知识,对于产生原因做一个总结及详解。 VLAN(Virtual Local Area Network,虚拟局域网),其主要用途是用来缩小广播域,即进行隔离。 先对广播域的一个概念做如下描绘:如下图,主机A、B、C、D均连接在交换机SW1上,其中A、C同网段为192.168.252网段,而B和D同网段,为192.168.250网段。 现,假如A与C第...

dandandean_96的博客 6889

避开这些坑!STM32H750 IAP升级实战:从Bootloader设计到APP接收的完整避坑指南

本文深入探讨STM32H750 IAP升级的完整避坑指南,从Bootloader设计到APP接收的全流程实践。特别针对QSPI Flash运行限制、SRAM跳转机制和固件校验等核心问题,提供工业级解决方案,帮助开发者提升升级成功率和系统稳定性。

weixin_30471561的博客 275

【极简spark教程】开始实战

spark命令行、intellij本地开发配置

檐前潜心学种瓜 542

【Halcon-2D测量】set_metrology_object_param 函数功能(用于配置计量对象常规参数)

HALCON算子 set_metrology_object_param 是2D计量模块的核心配置工具,用于动态修改计量对象的测量区域、边缘检测和几何拟合参数。该算子需在检测前调用,支持批量或单独修改对象参数,包含三类关键参数:测量区域(如长度、间距)、边缘检测(如平滑Sigma、阈值)和几何拟合(如RANSAC阈值、最小分数)。使用时需注意参数互斥规则(如measure_distance优先于num_measures)和多线程同步要求。算子无输出参数,仅修改计量模型内部状态,需配合apply_metrolo

weixin_45590420的博客 295

【Spark中创建RDD的两种方式】Spark中如何获取sc对象、以及创建RDD的两种方式

Spark中如何获取sc对象、以及创建RDD的两种方式

一个大数据的爱好者 673

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 267

Qt —— 在Win11下“Qt for Android“开发环境,通过USB在真机(华为Meta60 PRO)上调试运行,并打包APK并在真实手机运行

Qt —— 在Win11下“Qt for Android“开发环境,打包APK并在真实手机运行

315

Spark基本操作-sc

创建 SparkSessionfrom pyspark.sql import SparkSessionspark = SparkSession.builder \ .appName("Word Count") \ .getOrCreate()构建 scfrom pyspark.sql import SparkSessionspark = SparkSession.builder \

张旭的博客 9273

Unity音游开发全指南:模板与免费资源高效构建节奏游戏

**粒子特效** | [Universal VFX](https://assetstore.unity.com/packages/vfx/particles/universal-vfx-159182) | 免费视觉特效 || **UI素材** | [Game UI Pack](https://assetstore.unity.com/packages/2d/gui/game-ui-pack-86908) | 现代风格UI元素 |**音游开发的黄金法则**:完美的节奏游戏是音乐与游戏的和谐统一。

Loving_enjoy的博客 731

Spark从集合、HDFS、HBase、Elasticsearch和MySQL中读取数据,创建RDD

RDD的创建 RDD(Resilient Distributed Dataset)全称为弹性分布式数据集,是Spark对数据的核心抽象。创建RDD是使用RDD的第一步,一般可以由内存中的集合、文件、外部数据源生成或者由其他RDD转换而成。 1.并行集合 并行集合可以对Driver中的集合调用parallelize方法得到,Driver会将集合切成分区,并将数据分区分发到整个集群中。 val sc = new SparkContext(sparkConf) val rdd = sc.parallelize(S

|+街道口地痞- 992

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怎样创建Spark连接和读取数据集?

在文件1的main()方法中,调用JavaSparkContext对象的textFile()方法读取外部文件,将文件中的数据加载到textFileRDD,具体代码如下。在类CategoryTopl0中定义main()方法,该方法是Java程序执行的入口,在main()方法中实现Spark程序,具体代码如文件1所示。上述代码中,通过变量arg[o]指定文件路径,目的是执行提交Spark程序到YARN集群运行的命令中,通过参数指定文件路径。文件1 CategoryTop10.java。

zy1992As的博客 75

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spark 可以通过Hadoop输入格式访问HBase(创建hbase表和读取hbase数据)

package SparkSql import org.apache.hadoop.hbase.client.{HBaseAdmin, Put, Result} import org.apache.hadoop.hbase.io.ImmutableBytesWritable import org.apache.hadoop.hbase.{HBaseConfiguration, HColumnDe...

登峰造极胡子球手 2312

Spark创建DataFrame和读取CSV数据文件

之前写的程序中,有些API在Spark SQLContext没有,我计算的结果先保存在rdd中,最后在使用RDD转换成dataframe进行保存,话不多说下面是代码.//一个StruceFields你可以把它当成一个特征列。分别用列的名称和数据类型初始化 val structFields = List(StructField("age",DoubleType),StructField("hei

leishenop的专栏 3万+

hbase mysql hdfs_Spark从集合、HDFS、HBase、Elasticsearch和MySQL中读取数据,创建RDD

RDD的创建RDD(Resilient Distributed Dataset)全称为弹性分布式数据集,是Spark对数据的核心抽象。创建RDD是使用RDD的第一步,一般可以由内存中的集合、文件、外部数据源生成或者由其他RDD转换而成。1.并行集合并行集合可以对Driver中的集合调用parallelize方法得到,Driver会将集合切成分区,并将数据分区分发到整个集群中。val sc = ne...

weixin_34405769的博客 204

用Spark读取本地文件数据

运用spark进行本地文件数据的读取

weixin_67189258的博客 795

大数据编程实验一:HDFS常用操作和Spark读取文件系统数据

大数据编程实验,利用本地搭建的伪分布式集群进行HDFS常用操作和Spark读取文件系统数据的操作。

北天的博客 7270

Spark 读取不同数据源数据实践操作

本篇博客主要围绕 Spark 读取不同数据源数据展开,详细介绍了从环境准备、读取 MySQL 数据库数据、读取 CSV 文件数据到按条件查询数据等多个方面的操作步骤及示例代码。掌握这些基础的数据读取和查询操作,是我们进一步深入学习和应用 Spark 进行复杂数据处理的前提,希望大家可以多多实践,熟练运用这些知识哦。后续还会分享更多关于 Spark 以及大数据处理相关的内容,欢迎大家持续关注呀!

2401_89087594的博客 1107

spark读取数据并打印_Spark读取和保存数据

读写Parquet(DataFrame)Spark SQL可以支持Parquet、JSON、Hive等数据源,并且可以通过JDBC连接外部数据源。前面的介绍中,我们已经涉及到了JSON、文本格式的加载,这里不再赘述。这里介绍Parquet,下一节会介绍JDBC数据库连接。Parquet是一种流行的列式存储格式,可以高效地存储具有嵌套字段的记录。Parquet是语言无关的,而且不与任何一种数据处理框...

weixin_35216188的博客 2691

Spark RDD 之 数据读取

Note of rdd

weixin_46546516的博客 979

使用Spark SQL读取Hive上的数据

Spark SQL主要目的是使得用户可以在Spark上使用SQL,其数据源既可以是RDD,也可以是外部的数据源(比如Parquet、Hive、Json等)。Spark SQL的其中一个分支就是Spark on Hive,也就是使用Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业。本文就是来介绍如何通过Spark SQL来读取...

杜海的博客 6823

Spark:spark读取hbase

spark-shell运行,若要载入hbase的jar包: export SPARK_CLASSPATH=/opt/hbase-1.2.4/lib/* 获取hbase中列簇中的列值: import org.apache.spark._ import org.apache.hadoop.hbase.HBaseConfiguration import o...

weixin_34166472的博客 234
上一篇: Idea中开发spark程序(win10), Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
下一篇: Spark MLlib特征处理 之 StringIndexer、IndexToString使用说明以及源码剖析
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值