Spark装载数据源

Spark可以加载好多种外部数据源的格式,例如:csv,text,json,parquet等。我们在这里讲解下csv和json格式。

一、装载CSV数据源

文件链接
提取码: t4n2

文件预览
在这里插入图片描述
使用SparkContext

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("scvdemo")
    val sc = new SparkContext(conf)

    val lines = sc.textFile("in/users.csv",3)

    val fields2 = lines.filter(v=>v.startsWith("user_id")==false).map(_.split(","))
    println(fields2.count)
}

在这里插入图片描述

  • 使用SparkSession

option参数说明:
1. delimiter 分隔符,默认为逗号,
2. nullValue 空值设置,如果不想用任何符号作为空值,可以赋值null即可
3. quote 引号字符,默认为双引号"
4. header 第一行是否不作为数据内容,作为标题(true/false)
5. inferSchema 是否自动推测字段类型(true/false)
6. ignoreLeadingWhiteSpace 是否裁剪前面的空格(true/false)
7. ignoreTrailingWhiteSpace 是否裁剪后面的空格(true/false)

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("scvdemo")
    val spark = SparkSession.builder().config(conf).getOrCreate()

    val df = spark.read.format("csv")
      .option("header", "true").load("in/users.csv")
    //显示表头
    df.printSchema()
    //显示表数据,show中不加参数默认显示20行
    df.select("user_id","locale","birthyear").show(5)
}

在这里插入图片描述

  • 如果数据没有表头
def main(args: Array[String]): Unit = {
  val conf = new SparkConf().setMaster("local").setAppName("csvdemo2")
  val spark = SparkSession.builder().config(conf).getOrCreate()
  
  //sparkSession读取csv文件,没有表头信息,header的参数false
  val df = spark.read.format("csv").option("header","false").load("in/users2.csv")
  df.printSchema()
  
  //修改列名
  val df2 = df.withColumnRenamed("_c0","id")
  //修改列表数据类型
  val df3 = df2.withColumn("id",df2.col("id").cast("long"))
  df3.printSchema()
}

在这里插入图片描述

改名这里有个坑,下面是一些总结

  • 列名不区分大小写
    对比
//列名修改成全大写
val df2 = df.withColumn("USER_ID",df.col("user_id")).drop("user_id")
df2.printSchema()


//修改成新列名,结果新增一列
val df3 = df.withColumn("id",df.col("user_id"))
df3.printSchema()

//下面将原列删除
val df4 = df.withColumn("id",df.col("user_id")).drop("user_id")
df4.printSchema()

在这里插入图片描述

二、装载JSON数据源

  • 使用SparkContext

JSON数据解析:
(1)读取JSON格式文件
直接使用sc.textFile(“file://”)来读取.json文件即可
(2)JSON
Scala中有一个自带的JSON库 scala.util.parsing.json.JSON 可以 实现对JSON数据解析。
通过调用 JSON.parseFull(jsonString:String) 函数对输入的JSON字符串进行解析,如果解析成功则返回一个 Some( map:Map[String,Any] ) ,失败则返回None

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("jsondemo")
    val sc = new SparkContext(conf)
    val lines = sc.textFile("in/users.json")
    import scala.util.parsing.json._
    val rdd = lines.map(x=>JSON.parseFull(x))
    rdd.foreach(println)
}

在这里插入图片描述

  • 使用SparkSession

加载Json格式后,df会自动识别Schema
注:如果Json格式不严谨,sparkSQL能将问题数据解析出来

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("jsondemo")
    val spark = SparkSession.builder().config(conf).getOrCreate()

    val df = spark.read.format("json")
      .option("header", "true").load("in/users.json")
    df.printSchema()
    
    //修改列名,json同csv,列名不区分大小写
    val df2 = df.withColumnRenamed("Age","age")
    df2.printSchema()
    df2.select("age","name").show()

在这里插入图片描述

    //修改列数据类型
    val df3 =
      df.withColumn("age",df.col("Age").cast("Int"))
    df3.printSchema()

   //操作数据,将age加 5
    val df4 = df.withColumn("age",df.col("Age")+5)
     .withColumn("name",df.col("name"))
    df4.printSchema()
    df4.show
}

在这里插入图片描述


### 数据库装载或加载操作的方法 在数据库管理中,数据库的装载或加载通常涉及初始化、连接以及配置相关资源的操作。以下是关于如何执行数据库装载或加载的具体方法。 #### 使用 JDBC 进行数据库连接和 SQL 执行 当通过 Java 应用程序访问数据库时,可以利用 JDBC 驱动完成数据库的连接与操作。例如,在 Spark 中使用 `--driver-class-path` 参数指定 JDBC 驱动路径[^1]: ```bash spark-shell --driver-class-path /path/to/mysql-connector-java.jar ``` 上述命令用于启动 Spark Shell 并加载 MySQL 的 JDBC 驱动。一旦成功加载驱动,可以通过 JDBC URL 建立数据库连接并执行查询语句。 对于更复杂的场景,比如预防 SQL 注入攻击,推荐使用 `PreparedStatement` 对象来预编译 SQL 语句[^2]。这不仅提高了安全性,还优化了性能。 #### 利用 Druid 数据库连接池简化操作 Druid 是一种高性能的数据库连接池框架,能够显著提升应用程序对数据库的访问效率。以下是一个基于 Druid 实现数据库连接的例子[^3]: ```java import com.alibaba.druid.pool.DruidDataSourceFactory; import java.sql.Connection; import java.util.Properties; public class DruidExample { public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.load(DruidExample.class.getClassLoader().getResourceAsStream("druid.properties")); javax.sql.DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); try (Connection connection = dataSource.getConnection()) { System.out.println("Database connected successfully: " + connection); } } } ``` 此代码片段展示了如何通过读取外部配置文件 (`druid.properties`) 来创建数据源实例,并从中获取数据库连接。 #### 达梦数据库的维护与检查 针对特定类型的数据库(如达梦数据库),其装载过程可能还包括一些额外的运维工作。例如,监控线程数量、资源限制状态以及其他健康指标可以帮助确保数据库正常运行[^4]。具体命令如下所示: ```bash ps -T -p <PID> | wc -l # 查看线程总数是否超出 MAX_SESSIONS 设置 cat /proc/<PID>/limits # 获取当前服务进程的 ulimit 资源限制详情 ls /proc/<PID>/fd | wc -l # 统计打开文件描述符的数量 ./dmdbchk path=<INI_FILE_PATH> # 启动 dmdbchk 工具检测数据库结构完整性 ``` 需要注意的是,虽然 `dmdbchk` 可以验证数据库元数据的一致性和合法性,但它无法识别由人工篡改引起的数据错误。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值