为什么 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();
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();