Spark中重复的列名称读取csv

时间:2019-06-04 08:06:57

标签: java apache-spark-sql

我读取了csv文件,该文件具有重复的列。

我想在数据框中保留列的名称。

我试图在我的sparkcontext conf spark.sql.caseSensitive 中添加此选项,并将其放置为 true ,但不幸的是,它没有任何作用。

重复的列名称为NU_CPTE。 Spark尝试通过添加列0、7的数量来重命名它

NU_CPTE0 | CD_EVT_FINANCIER | TYP_MVT_ELTR | DT_OPERN_CLI | LI_MVT_ELTR | MT_OPERN_FINC | FLSENS | NU_CPTE7

SparkSession spark= SparkSession
                .builder()
                .master("local[2]")
                .appName("Application Test")
                .getOrCreate();    

spark.sparkContext().getConf().set("spark.sql.caseSensitive","true"); 

Dataset<Row> df=spark.read().option("header","true").option("delimiter",";").csv("FILE_201701.csv");

df.show(10);

我想要这样的结果:

NU_CPTE | CD_EVT_FINANCIER | TYP_MVT_ELTR | DT_OPERN_CLI | LI_MVT_ELTR | MT_OPERN_FINC | FLSENS | NU_CPTE

2 个答案:

答案 0 :(得分:1)

Spark已修复,以允许重复的列名称带有附加的数字。因此,您得到的数字将附加到重复的列名称中。请找到以下链接

https://issues.apache.org/jira/browse/SPARK-16896

答案 1 :(得分:0)

您尝试设置caseSensitive属性的方式确实无效。尝试更换:

{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/home/myname/.conan/data/range-v3/0.5.0/ericniebler/stable/package/52137beddd093ee80959d89f66348c14a1589eb7/include"
],

具有:

spark.sparkContext().getConf().set("spark.sql.caseSensitive","true"); 

但是,这仍然假设您的原始列在大小写上存在某种差异。如果它们具有相同的大小写,它们将仍然相同,并以列号为后缀。