Spark SQL之DataSet

DataSet是分布式的数据集,是spark1.6才被添加进来的。比DataFrame出现的晚。DataSet支持lambda表达式,而且DataFrame的API在DataSet中大部分都可以继续使用,相当于DataFrame的升级版。

Spark如何解析csv文件

待处理文件infos.txt,内容如下:

id,name,age
1,vincent,20
2,sarah,19
3,sofia,29
4,monica,26

代码如下:

package cn.ac.iie.spark

import org.apache.spark.sql.SparkSession

/**
 * DataSet 操作
 */
object DataSetApp {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("DataFrameCase").master("local[2]").getOrCreate()

    // spark如何解析csv文件
    val df = spark.read.option("header", "true").option("inferSchema", "true").csv("file:///E:/test/infos.txt")
    df.show()
    // 注意需要导入隐式转换
    import spark.implicits._

    val ds = df.as[Infos]
    ds.map(line => line.id).show()
    spark.close()
  }

  case class Infos(id: Int, name: String, age: Int)

}

静态类型(Static-typing)和运行时类型安全(runtime type-safety)

在这里插入图片描述
Syntax Errors语法解析错误:编写SQL时,是在运行时才解析SQL语句写的对不对。
Analysis Errors对于分析错误:SQL也是在运行时才能知道是不是正确。
举个栗子:
SQL语句是:select name from person;,当我们写的时候单词写错了写成了:selcet name from peson;,那么这个SQL语句在编译的时候是成功的,但是在执行过程中是错误的。
DataFrame:df.select("name")如果这句话写错成了df.selcet("name")那么编译是不通过的。而写错成了df.select("nname")那么编译时不通过。
DataSet:ds.map(line => line.name)如果写成ds.map(line => line.nname)那么编译是就不通过了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值