Spark SQL
DataFrame与RDD的区别
- DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能。
- Spark能够轻松实现从MySQL到DataFrame的转化,并且支持SQL查询
- RDD是分布式的Java对象的集合,但是,对象内部结构对于RDD而言却是不可知的。
- DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息。
DataFrame的创建
SparkSession实现了SQLContext及HiveContext的所有功能,支持从不同的数据源加载数据,并把数据转换成DataFrame,并且支持把DataFrame转换成SQLContext自身中的表,然后使用SQL语句来操作数据。SparkSession亦提供了HiveQL以及其他依赖于Hive的功能的支持。
import spark.implicts._ 支持RDDs转换为DataFrmaes及后续SQL操作,用于Scala中,
//以下两种命令在scala中可正确执行,但在pyspark中返回错误
df.select(df("name"), df("age")+1).show()
df.filter(df("age") > 20).show
pyspark中的命令:
df.select(df["name"], df["age"]+1).show()
df.filter(df["age"] > 20).show
理解:在pyspark中指明某一列如“age”,需使用df.age或df[“age”],而在scala中需使用df(“age”)
df.select(df("name").as("username"),df("age")).show()
pyspark中的命令:
1. as变为alias
df.select(df["name"].alias("username"), df.age).