spark dataframe 类型转换

读一张表,对其进行二值化特征转换。可以二值化要求输入类型必须double类型,类型怎么转换呢?

直接利用spark column 就可以进行转换:

 

DataFrame dataset = hive.sql("select age,sex,race from hive_race_sex_bucktizer ");

/**

* 类型转换

*/

dataset = dataset.select(dataset.col("age").cast(DoubleType).as("age"),dataset.col("sex"),dataset.col("race"));

 

是不是很简单。想起之前的类型转换做法,遍历并创建另外一个满足类型要求的RDD,然后根据RDD创建Datafame,好复杂!!!!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
JavaRDD<Row> parseDataset =   dataset.toJavaRDD().map(new Function<Row,Row>() {
 
    @Override
    public Row call(Row row) throws Exception {
        System.out.println(row);
        long age = row.getLong(row.fieldIndex("age"));
        String sex = row.getAs("sex");
        String race =row.getAs("race");
        double raceV  = -1;
        if("white".equalsIgnoreCase(race)){
            raceV = 1;
        } else if("black".equalsIgnoreCase(race)) {
            raceV = 2;
        } else if("yellow".equalsIgnoreCase(race)) {
            raceV = 3;
        } else if("Asian-Pac-Islander".equalsIgnoreCase(race)) {
            raceV = 4;
        }else if("Amer-Indian-Eskimo".equalsIgnoreCase(race)) {
            raceV = 3;
        }else {
            raceV = 0;
        }
         
        return RowFactory.create(age,("male".equalsIgnoreCase(sex)?1:0),raceV);
    }
});
 
StructType schema = new StructType(new StructField[]{
         createStructField("_age", LongType, false),
          createStructField("_sex", IntegerType, false),
          createStructField("_race", DoubleType, false)
        });
 
DataFrame  df  =  hive.createDataFrame(parseDataset, schema);

  不断探索,不断尝试!

 

posted @   李克华  阅读(17438)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示