我正在尝试运行以下代码
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