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)那么编译是就不通过了。
本文探讨了Spark中DataSet与DataFrame的概念与区别,详细介绍了如何使用Spark读取并解析CSV文件,展示了静态类型和运行时类型安全的重要性,并通过实例对比了SQL、DataFrame和DataSet在错误处理上的差异。
873

被折叠的 条评论
为什么被折叠?



