我正在尝试运行以下代码

        SparkSession spark = SparkSession
                .builder()
                .appName("test")
                .master("local")
//                .enableHiveSupport()
                .getOrCreate();
        List<String> list=new ArrayList<String>();
        list.add("HI");
        list.add("HI");
        list.add("HI");
        Dataset<Row> dataDs = spark.createDataset(list, Encoders.STRING()).toDF();
        List<String> list2=new ArrayList<String>();
        list2.add("1");
        list2.add("2");
        list2.add("3");
        Dataset<Row> dataDs2 = spark.createDataset(list2, Encoders.STRING()).toDF().withColumnRenamed("value","newvalue");
        Column col=dataDs2.col("newvalue");
        dataDs=dataDs.withColumn("newcol",col);
        dataDs.show();


但是,出现错误提示


; [主线程] org.apache.spark.sql.AnalysisException中的异常:运算符中的value#1中缺少已解析的属性newvalue#10!项目[value#1,newvalue#10 AS newcol#13];
!项目[值#1,新值#10 AS新列#13]


当我在线搜索它时,它说可能存在重复的列名的情况。但是,我的列名称不同。 dataDs的列名称为“值”,而dataDs2的列名称为“ newvalue”。所以,我不明白为什么错误仍然发生。有人可以帮我吗?

最佳答案

问题在这里:

Column col=dataDs2.col("newvalue");
dataDs=dataDs.withColumn("newcol",col);


col是dataDs2()中的一列,您不能在dataDS中使用它。

看来您想zip()两个数据框。有RDD.zip()函数。
在此处查看更多方法:How to zip two (or more) DataFrame in Spark

09-13 13:28