Java常用API之Encoders类解读

写在开头:本文用于作者学习Java常用API

我将官方文档中Encoders类中所有API全测了一遍并打印了结果,日拱一卒,常看常新

在Spark中,Encoders类提供了一些静态方法用于创建不同数据类型的编码器。

首先,我遇到这样一个问题,就是:

复制代码
Encoder<String> string = org.apache.spark.sql.Encoders.STRING();标黄的这个包必须得加,如果我不加,自动导包导得是 import org.apache.spark.network.protocol.Encoders;这个包

但是我需要org.apache.spark.sql.Encoders这个包的这个类,所以加了完整的类路径。下面是Encoders的API介绍

1. Encoders.STRING()

// 创建一个String类型的编码器

java 复制代码
@Test
    // 创建一个String类型的编码器
    // 1. Encoders.STRING()
    public void test_STRING(){
        Encoder<String> string = org.apache.spark.sql.Encoders.STRING();
        System.out.println(string);//class[value[0]: string]
        System.out.println(string.schema());//StructType(StructField(value,StringType,true))
    }

2. Encoders.INT()

// 创建一个Integer类型的编码器

java 复制代码
@Test
    // 创建一个Integer类型的编码器
    // 2. Encoders.INT()
    public void test_INT(){
        Encoder<Integer> anInt = org.apache.spark.sql.Encoders.INT();
        System.out.println(anInt);//class[value[0]: int]
    }

3. Encoders.bean(MyClass.class)

// 创建一个自定义类的编码器,其中MyClass是自定义类的类名

java 复制代码
@Test
    // 创建一个自定义类的编码器,其中MyClass是自定义类的类名
    // 3. Encoders.bean(MyClass.class)
    public void test_bean(){
        Encoder<MyClass> myClassEncoder = org.apache.spark.sql.Encoders.bean(MyClass.class);
        System.out.println(myClassEncoder.clsTag());//com.atguigu.sparksql.MyClass
        System.out.println(myClassEncoder.schema());//StructType()
    }

4. Encoders.kryo(MyClass.class)

// 创建一个使用Kryo序列化的自定义类的编码器

java 复制代码
@Test
    // 创建一个使用Kryo序列化的自定义类的编码器
    // 4. Encoders.kryo(MyClass.class)
    public void test_kryo(){
        Encoder<MyClass> kryo = org.apache.spark.sql.Encoders.kryo(MyClass.class);
        System.out.println(kryo);//class[value[0]: binary]
        System.out.println(kryo.schema());//StructType(StructField(value,BinaryType,true))
        System.out.println(kryo.clsTag());//com.atguigu.sparksql.MyClass
    }

5. Encoders.tuple(Encoders.INT(), Encoders.STRING())

// 创建一个元组编码器,用于将多个数据类型组合成一个元组

java 复制代码
@Test
    // 创建一个元组编码器,用于将多个数据类型组合成一个元组
    // 5. Encoders.tuple(Encoders.INT(), Encoders.STRING())
    public void test_tuple(){
        Encoder<Tuple2<Integer, String>> tupleEncoder = org.apache.spark.sql.Encoders.tuple(org.apache.spark.sql.Encoders.INT(), org.apache.spark.sql.Encoders.STRING());
        System.out.println(tupleEncoder);//class[_1[0]: int, _2[0]: string]
        System.out.println(tupleEncoder.clsTag());//scala.Tuple2
        System.out.println(tupleEncoder.schema());//StructType(StructField(_1,IntegerType,true),StructField(_2,StringType,true))
    }
相关推荐
无限的鲜花5 小时前
反射(原创推荐)
java·开发语言
IT二叔5 小时前
Java项目部署-03-teamcity-cicd-docker镜像流水线方式部署
java·ci/cd·持续部署
yongche_shi5 小时前
ragas官方文档中文版(五十)
开发语言·python·ai·ragas·如何评估和改进 rag 应用
一路向北he5 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
超级数据查看器6 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
AI行业学习6 小时前
Notepad++ 官方下载 + 完整安装 + 全套优化配置(2026最新)
开发语言·人工智能·python·前端框架·html·notepad++
折哥的程序人生 · 物流技术专研7 小时前
《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
java·面试题·java进阶·blockingqueue·并发容器·集合源码·java100天进阶
ai_coder_ai7 小时前
编写自动化脚本,在自己后端服务中使用Open Api进行设备相关操作
java·运维·自动化
大圣编程7 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
硕风和炜7 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集