为什么 Spark Dataset.select 替换列值

Why Spark Dataset.select replacing the column values

Dataset<Row> ds = .....
ds = ds.select("cola", "colb");
ds.show();

DS 已正确加载。 DS 包含多个列。我想要 select "cola" 和 "colb" 列。这些列确实存在,否则上面的代码会抛出错误 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

当您将数据从 DB 加载到 dataSet 时,在看到实际数据之前,切勿相信数据已正确加载。

对于这种情况,我可以看到 ds.printSchema,我可以看到 ds.count().show(),但是当我执行 ds.select("cola", "colb") 时,它没有显示正确的数据。

现在一些调查表明我不应该在从 memSql

加载时使用 JDBC

我使用的是以下 错误的 。它可以加载模式,计算但不能加载实际数据。

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

相反,我使用了 com.memsql.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();