【发布时间】:2019-03-14 02:23:47
【问题描述】:
我需要使用 Spark 和 Java 从 MariaDB 读取一个表。
我写了一个从数据库读取表数据的Java代码。连接建立成功,但是读取数据时出错。我正在尝试将表数据作为数据框读取。但是列名在结果中显示为列值。找到下面给出的代码:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import static org.apache.spark.sql.functions.col;
public class mariadb_to_csv {
public static void main(String[] args) {
Properties prop = new Properties();
String resourceName = "config.properties";
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
prop.load(resourceStream);
} catch (IOException e) {
e.printStackTrace();
}
SparkSession spark = SparkSession.builder()
.appName("Java Spark SQL basic example")
.config("spark.some.config.option", "some-value").getOrCreate();
Dataset<Row> jdbcDF = spark.read().format("jdbc")
.option("url","url_address")
.option("driver", "org.mariadb.jdbc.Driver")
.option("dbtable", "source_table")
.option("user", "username")
.option("password", "password")
.load();
jdbcDF.select(col("code"), col("name"), col("isActive"), col("createdByUser"), col("modifiedByUser")).show();
}
}
结果,列值在列名中重复。
这有什么问题?
【问题讨论】:
-
列“isActive”的值为真,而不是列名。也许,表包含这样的虚拟数据。
标签: java apache-spark jdbc apache-spark-sql mariadb