关于在使用sparksql写程序是报错以及解决方案:org.apache.spark.sql.AnalysisException: Duplicate column(s): "name" found, cannot save to file.
说明:
spark --version : 2.2.0
我有两个json文件,分别是emp和dept:
emp内容如下:
- {"name": "zhangsan", "age": 26, "depId": 1, "gender": "male", "salary": 20000}
- {"name": "lisi", "age": 36, "depId": 2, "gender": "female", "salary": 8500}
- {"name": "wangwu", "age": 23, "depId": 1, "gender": "male", "salary": 5000}
- {"name": "zhaoliu", "age": 25, "depId": 3, "gender": "male", "salary": 7000}
- {"name": "marry", "age": 19, "depId": 2, "gender": "female", "salary": 6600}
- {"name": "Tom", "age": 36, "depId": 1, "gender": "female", "salary": 5000}
- {"name": "kitty", "age": 43, "depId": 2, "gender": "female", "salary": 6000}
- {"name": "Tony","age": 36,"depId": 4,"gender":"female","salary": 4030}
dept内容如下:
- {"id": 1, "name": "Tech Department"}
- {"id": 2, "name": "Fina Department"}
- {"id": 3, "name": "HR Department"}
现在我需要通过sparksql将两个文件加载进来并做join,最后将结果保存到本地
下面是操作步骤:
1、初始化配置
- val conf = new SparkConf().setMaster("local[2]").setAppName("Load_Data")
- val sc = new SparkContext(conf)
- val ssc = new sql.SparkSession.Builder()
- .appName("Load_Data_01")
- .master("local[2]")
- .getOrCreate()
- sc.setLogLevel("error") //测试环境为了少打印点日志,我将日志级别设置为error
2、将两个json文件加载进来
- val df_emp = ssc.read.json("file:///E:\\javaBD\\BD\\json_file\\employee.json")
- val df_dept = ssc.read.format("json").load("file:///E:\\javaBD\\BD\\json_file\\department.json")
3、分别将加载进来的两个json文件打印出来,看看是否成功载入
- df_emp.show()
- df_dept.show()
4、数据加载都没有问题,接下来二者进行join操作:
- df_emp.join(df_dept,df_emp("depId") === df_dept("id"),"left").show()
5、这样结果也可以正常打印出来了,貌似是没有什么问题了,接下来直接就save就可以了呗,但是进行save的时候就报错了:
- df_emp.join(df_dept,df_emp("depId") === df_dept("id"),"left").write.mode(SaveMode.Append).csv("file:///E:\\javaBD\\BD\\json_file\\rs")
于是开始百度,找到了原因,论坛链接,大致的意思就是说,要保存的表中有相同的name字段,这样是不行的,那么解决方案就很明显了,让两个那么字段名称不相同么,那就分别给他们其别名呗,接下来开始修改代码:
1、初始化配置不变
2、读文件不变
3、跟别获取到两个DF(json文件加载加载进来之后就是两个DF)的列明,并进行分别设置别名
- //分别拿出两张表的列名
- val c_emp = df_emp.columns
- val c_dept = df_dept.columns
- //分别对两张表的别名进行设置
- val emp = df_emp.select(c_emp.map(n => df_emp(n).as("emp_" + n)): _*)
- val dept = df_dept.select(c_dept.map(n => df_dept(n).as("dept_" + n)): _*)
4、接着在进行保存,程序报错消失:
- emp.join(dept,emp("emp_depId") === dept("dept_id"),"left").write.mode(SaveMode.Append).csv("file:///E:\\javaBD\\BD\\json_file\\rs")
这里的这个保存的路径说名一下:我是保存在windows本地,因为我配置了hadoop的环境变量,所以如果写本地需要这样写,如果去掉"file:///"的话,idea会认为是hdfs的路径,所有会报错路径找不到错误,如果要写入到hdfs的话,最好将地址写全:hdfs://namenode_ip:9000/file
程序没有报错,然后到指定目录下查看,文件是否写入:
文件已经成功写入,over
关于在使用sparksql写程序是报错以及解决方案:org.apache.spark.sql.AnalysisException: Duplicate column(s): "name" found, cannot save to file.的更多相关文章
- Django(21)migrate报错的解决方案
前言 在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本.映射到数据库中.创建新的表或者修改表的结构. 问题1:migrate怎么判断哪 ...
- vue-cesium中经纬度写反了,报错
vue-cesium中经纬度写反了,报错 [Vue warn]: Invalid prop: custom validator check failed for prop "position ...
- Spark程序编译报错error: object apache is not a member of package org
Spark程序编译报错: [INFO] Compiling 2 source files to E:\Develop\IDEAWorkspace\spark\target\classes at 156 ...
- 运行netcore2.2程序是报错
运行netcore2.2程序是报错 C:\myself\WuZhui\WuZhui\bin\Release\netcoreapp2.2>dotnet WuZhui.DLLError: An as ...
- 新手常见的python报错及解决方案
此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题.希望帮助到刚入门的朋友们.后续会不断补充. 目录 1.NameErr ...
- 关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案
当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序 ...
- 报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username'
在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key ' ...
- 关于Entity Framework中的Attached报错相关解决方案的总结
关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法 ...
- Mysql only_full_group_by以及其他关于sql_mode原因报错详细解决方案
Mysql only_full_group_by以及其他关于sql_mode原因报错详细解决方案 网上太多相关资料,但是抄袭严重,有的讲的也是之言片语的,根本不连贯(可能知道的人确实不想多说) 我总共 ...
随机推荐
- python --- 07 补充( join 删除和添加 fromkeys ) 深浅拷贝
一.基本数据类型补充 1.join() "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到 ...
- Junit的套件使用
定义一个类,在类的上方添加@RunWith(Suite.class)和@SuiteClasses({XX.class,YY.class,...}) 实例有两个类分别为:public class Log ...
- The Mathematics of the Rubik’s Cube
https://web.mit.edu/sp.268/www/rubik.pdf Introduction to Group Theory and Permutation Puzzles March ...
- 【htop】Linux CentOS 6.5下安装htop进程管理工具
一.Htop的使用简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (fo ...
- Java 多线程案例
同步代码块 SynchronizedTest类,用来表示取票功能 package concurency.chapter6; public class SynchronizedTest implemen ...
- POJ 2409 Let it Bead
思路 同这道题,只是颜色数从3变成c 代码 #include <cstdio> #include <algorithm> #include <cstring> #d ...
- 题解——HDU 4734 F(x) (数位DP)
这道题还是关于数位DP的板子题 数位DP有一个显著的特征,就是求的东西大概率与输入关系不大,理论上一般都是数的构成规律 然后这题就是算一个\( F(A) \)的公式值,然后求\( \left [ 0 ...
- AtomicReference实现单例模式
CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试. 乐观锁的一种实 ...
- spring配置freemarker
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 【转载】EclEmma工具介绍
https://wenku.baidu.com/view/1017567e5acfa1c7aa00cc5f.html https://www.ibm.com/developerworks/cn/rat ...