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); |
不断探索,不断尝试!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架