DateFrame

2年前 (2020-03-24) 521次浏览 已收录 0个评论

读取json格式的RDD加载成DateFrame

DateFrame 有数据,有列的schema
sqlContext读取json文件加载成DateFrame ,DateFrame中列会按照Ascii码进行排序

直接写sql ,查询出来的dateFrame会按照指定的列进行查询

不能读取嵌套的json格式

package spark;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.VoidFunction;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;

public class SQl {
public static void main(String[] args) {
 SparkConf conf = new SparkConf();
 conf.setMaster("local").setAppName("sql");
 JavaSparkContext sc = new JavaSparkContext(conf);
 
 //创建DateFrame
 SQLContext sqlcontext = new SQLContext(sc);
 
 DataFrame df=sqlcontext.read().format("json").load("json");

 
 df.show();

 
 //select name,age from xxx where age>18
 df.select("name","age").where(df.col("age").gt(18)).show();
 

 /*
  * 将DateFrame注册成临时表,使用sql进行查询
  * t1这张表,不在内存中也不在磁盘中,相当于一个指针指向源文件,底册操作解析spark job读取源文件
  */
 df.registerTempTable("t1");
 sqlcontext.sql("select * from t1 where age > 18").show();
 
 
 //DateFrame转RDD
 JavaRDD<Row> javaRDD =df.javaRDD();
 javaRDD.foreach(new VoidFunction<Row>() {

  @Override
  public void call(Row arg0) throws Exception {
   // TODO Auto-generated method stub
   System.out.println(arg0.get(0));
  }
 
 });
 
 
 
 sc.stop();
}
}

渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:DateFrame
喜欢 (0)

您必须 登录 才能发表评论!