为什么使用Spark Dataset.select替换列值

问题描述 投票:0回答:1
Dataset<Row> ds = .....
ds = ds.select("cola", "colb");
ds.show();

DS已正确加载。 DS包含多个列。我要选择“可乐”和“ 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
apache-spark apache-spark-sql apache-spark-dataset
1个回答
0
投票

当从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();
© www.soinside.com 2019 - 2024. All rights reserved.