动态创建schema加载DataFrame

2020-03-28 195次浏览 已收录 8个评论

动态构建DataFrame中的元数据
创建row顺序要和动态创建schema的顺序一致

package spark;

import java.util.Arrays;
import java.util.List;

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.Function;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

public class dongtai {
public static void main(String[] args) {
 SparkConf conf = new SparkConf();
 conf.setMaster("local").setAppName("rdddongtai");
 JavaSparkContext sc = new JavaSparkContext(conf);
 SQLContext sqlcontext = new SQLContext(sc);
 JavaRDD<String>linerdd = sc.textFile("person.txt");
 //转换成Row类型的RDD
 JavaRDD<Row> rowrdd=linerdd.map(new Function<String, Row>() {

  @Override
  public Row call(String arg0) throws Exception {
   // TODO Auto-generated method stub
   return RowFactory.create(
     arg0.split(",")[0],
     arg0.split(",")[1],
     Integer.valueOf(arg0.split(",")[2]));
  }
 });
 //动态构建DataFrame中的元数据
 //创建row顺序要和动态创建schema的顺序一致
 List<StructField>aslist=Arrays.asList(
   DataTypes.createStructField("id",DataTypes.StringType,true),
   DataTypes.createStructField("name",DataTypes.StringType,true),
   DataTypes.createStructField("age",DataTypes.IntegerType,true)
   );
 StructType schema=DataTypes.createStructType(aslist);
 DataFrame df = sqlcontext.createDataFrame(rowrdd,schema);
 
 df.show();
 sc.stop();
}
}

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

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

(8)个小伙伴在吐槽
  1. 我也是学计算机的
    我也是渣渣2020-03-29 18:31
  2. 给你点赞
    中国加油小子2020-03-29 18:32
  3. 我也是渣渣2020-03-29 18:32
  4. 挺明白的
    你哥2020-03-29 18:33
  5. 最好再详细点
    中国加油小子2020-03-29 18:33
  6. 可以
    沥青2020-05-26 09:31
  7. good厉害了
    努力2020-05-26 09:56
  8. 给你点赞
    笨鸟先飞2020-05-26 10:48