Почему Spark Dataset.select заменяет значения столбца - PullRequest
0 голосов
/ 15 января 2020
Dataset<Row> ds = .....
ds = ds.select("cola", "colb");
ds.show();

DS загружен правильно. DS содержит несколько столбцов. Я хочу выбрать "cola" и "colb" colums. Эти столбцы существуют, в противном случае приведенный выше код выдает ошибку Caused by: org.apache.spark.sql.AnalysisException: cannot resolve colA given input columns. Моя проблема заключается в том, что он заменяет значения с именем столбца. Как я могу сохранить исходные значения?

expected 

cola | colb
1       2
3       4

Что я получаю

cola | colb
cola   colb 
cola   colb

1 Ответ

0 голосов
/ 16 января 2020

Когда вы загружаете данные в набор данных из БД, никогда не верьте, что данные загружены правильно, пока вы не увидите фактические данные.

В этом случае я мог видеть ds.printSchema, я мог видеть ds.count().show() но когда я делал ds.select("cola", "colb"), он не показывал правильные данные.

Теперь небольшое исследование показало, что я не должен использовать JDB C при загрузке из mem Sql

Я использовал следующее Что было не так . Он может загружать схему, считать, но не фактические данные.

 Dataset<Row> ds= spark.read()
                .format("jdbc")
                .option("user", getDbUser(true))
                .option("password", getDbPass(true))
                .option("url", h2RawPositions)
                .option("dbtable", h2PositionTableName)
                .load();

Вместо этого я использовал com.mem sql .spark.connector ( Source ), который работал.

Dataset<Row> gsProducts = spark.read()
                .format("com.memsql.spark.connector")
                .option("url", memsqlConnection)
                .option("dbtable", mamsqlTableName) 
                .option("query", "select blah, blah frm memSqlTableName")
                .load();
...