Разрешенные атрибуты: новое значение № 10 отсутствует в Java spark - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь запустить следующий код

        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();

Однако появляется ошибка, сообщающая, что

Исключение в потоке "главная" организация. apache. spark. sql .AnalysisException: разрешенные атрибуты (новые значения) # 10 отсутствуют в значении # 1 в операторе! Project [значение # 1, новое значение # 10 AS newcol # 13] ;; ! Project [значение # 1, новое значение # 10 AS newcol # 13]

Когда я искал об этом в Интернете, он говорит, что может быть случай с дублирующимися именами столбцов. Тем не менее, мои имена столбцов разные. dataDs имеет имя столбца как «значение», а dataDs2 имеет имя столбца «новое значение». Итак, я не понимаю, почему ошибка все еще происходит. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 31 марта 2020

Проблема здесь:

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

Вы col - это столбец из dataDs2 (), вы не можете использовать его в dataDS.

Похоже, вы хотите сжать () два кадра данных. для этого есть функция RDD.zip (). Смотрите другие методы здесь: Как заархивировать два (или более) DataFrame в Spark

...