关于Spark SQL外部表在实战中遇到的问题

2024-06-18 01:18

本文主要是介绍关于Spark SQL外部表在实战中遇到的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

笔者之前写过一篇关于Spark SQL外部表的比较全面的学习实验博客,参https://blog.csdn.net/u011817217/article/details/92403843 

本篇旨在描述和总结在实际工作中使用Spark SQL外部表遇到的一些问题以及相应的解决方案。

一、需求描述

外围系统通过文件接口的方式定期给一份数据文件,关于接口描述和数据文件示例如下:

1. 文件接口内容

2. 数据文件示例

1)Linux上查看

2)Windows上Notepad++查看

 

二、创建外部表并导入数据文件

1. 建表语句

create external table ci_interface_label_catelog(day_id              string,prvnce_id           string,category_id         bigint,category_parent_id  bigint,category_name       string,category_level      int,category_ord        int,category_path       string,category_path_desc  string,label_object        string,class_status        string
)
row format delimited fields terminated by '\u0005' 
lines terminated by '\n' 
stored as textfile location 'hdfs://streamcluster/hupeng/data/ci_interface';

2. 导入数据文件

通过hdfs dfs -put -f 命令将本地的数据文件上传到HDFS的/hupeng/data/ci_interface目录下。

hdfs dfs -put data_file.DAT /hupeng/data/ci_interface

三、问题及解决方法

1. 中文显示乱码

尝试指定表的编码格式:

ALTER TABLE ci_interface_label_catelog SET SERDEPROPERTIES ('serialization.encoding'='GBK');

效果如上图,虽然中文显示正常了,但是通过查看数据发现class_stauts字段值出现混乱的情况,和实际数据文件给定的内容不一致。

2. 部分字段值和数据文件不一致

出现这个原因是因为在进行了上面的操作,初步怀疑是不是数据文件编码的问题。

1)将数据文件编码转换成UTF-8格式:

iconv -c -f GBK -t UTF-8 LABEL_CATELOG.20190705.20190705.01.001.001.822.DAT -o export.txt

2)修改表的编码格式

ALTER TABLE ci_interface_label_catelog SET SERDEPROPERTIES ('serialization.encoding'='UTF-8');

3)hdfs dfs -put -f 

hdfs dfs -put -f export.txt /hupeng/data/ci_interface

一切都正常。

3. 验证创建表的默认编码是不是UTF-8

1)drop table ci_interface_label_catelog;

2)重新建表

3)将数据文件编码转换成UTF-8格式

4)hdfs dfs -put -f 

结果和2中一致,表明创建表的默认编码是UTF-8。

 

 

这篇关于关于Spark SQL外部表在实战中遇到的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070903

相关文章

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

mybatis-plus分页无效问题解决

《mybatis-plus分页无效问题解决》本文主要介绍了mybatis-plus分页无效问题解决,原因是配置分页插件的版本问题,旧版本和新版本的MyBatis-Plus需要不同的分页配置,感兴趣的可... 昨天在做一www.chinasem.cn个新项目使用myBATis-plus分页一直失败,后来经过多方

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

mysql关联查询速度慢的问题及解决

《mysql关联查询速度慢的问题及解决》:本文主要介绍mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql关联查询速度慢1. 记录原因1.1 在一次线上的服务中1.2 最终发现2. 解决方案3. 具体操作总结mysql