Spark SQL它支持两种不同的方式转换已经存在的RDD到DataFrame
1.反射(Java中的概念,scala是隐式转换)
2.运行编程接口
用反射去推倒出来RDD里面的schema。这个方式简单,但是不建议使用,因为在工作当中,使用这种方式是有限制的。
对于以前的版本来说,case class最多支持22个字段如果超过了22个字段,我们就必须要自己开发一个类,实现product接口才行。因此这种方式虽然简单,但是不通用;因为生产中的字段是非常非常多的,是不可能只有20来个字段的。
反射创建一个DataFrame,使用编程的方式 这个方式用的非常多。通过编程方式指定schema ,对于第一种方式的schema其实定义在了case class里面了。
当我们的case class不能提前定义(因为业务处理的过程当中,你的字段可能是在变化的),因此使用case class很难去提前定义。
使用该方式创建DF的三大步骤:
1.从原有的RDD抽样构建新的行RDD
2.用一个结构类型来创建模式,这个模式与第1步中创建的RDD中的行结构相匹配。
3.通过SparkSession提供的createDataFrame方法将模式应用到行的RDD。创建模式由StructType表示匹配的行结构在步骤1中创建的抽样
编程接口 生产schema DataFram创建最后的例子是将schema 和dataframe分开,增加代码的复用性。业务需求是不断在更新中。这样会减少不必要的工作量
网友评论