java中使用spark如何将column多列合为一列

7 篇文章 0 订阅
5 篇文章 0 订阅

接下来介绍几种使用spark将DataFrame中一行的多列合并到一列中,并且该列以不同的类型展示保存

1、建立dataset

//自己需要连接的mongo库
    private static String datasource = "";
    //自己需要连接的mongo库的集合
    private static String targetTable = "";

    SparkSession sparkSession = SparkSession.builder()
            .appName("hive-mongo")
            .master("local[*]")
            .enableHiveSupport()
            .config("spark.sql.hive.convertMetastoreOrc", false)
            .config("spark.sql.legacy.hive.tmpTable", true)
            .config("convertMetastoreParquet", false)
            .config("spark.sql.debug.maxToStringFields", 1000)
            .config("spark.mongodb.output.uri", datasource)
            .config("spark.mongodb.output.collection", targetTable)
            .getOrCreate();

    String sql = "select *from user ";

    Dataset<Row> dataset = sparkSession.sql(sql);

2、将已有的列多列合并为一列,并删除之前的列

    //将已有的列(cloumn)多列合并为一个列;并删除之前的列
    Dataset<Row>getDataset = dataset.withColumn("newFLag",concat_ws(String.valueOf(','),
            dataset.col("name"),dataset.col("sex"))).drop("name","sex");

3、将已有的列多列合并为一列,并用特定字符连接

    //将已有的列(cloumn)多列合并为一个列.并用“_”拼接
    Dataset<Row>upselect = dataset.withColumn("newFLag",concat_ws(String.valueOf('_'),
            dataset.col("name"),dataset.col("sex")));

4、将已有的列多列合并为一列,用数组表示

    //将已有的列(column)多列合并为一个列,用数组表示
    Dataset<Row>getUpselect = dataset.withColumn("newFlags", split(col("newFlag"), ",")).drop("newFlag");

5、将已有的列多列合并为一列,并计算合并的值

    //将已存在的列合并为一个列,并计算合并的值
    Dataset<Row>getSelectNum = dataset.withColumn("newFlagNum", dataset.col("A").plus("B").cast(DataTypes.IntegerType));

6、获取已存在的某一列的值的长度,并将获取的长度新增一列

 

//获取已存在的某一列的值的长度,并将获取的长度新增一列
     UDF1 lengt = new UDF1<String, Integer>() {

        @Override
        public Integer call(String s) throws Exception {
            return s.getBytes().length;
        }
    };

    //
    Dataset<Row> getselectLength;
    {
        try {
            getselectLength = dataset.withColumn("bytesLength", (Column) lengt.call(dataset.col("newFlags")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枝风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值