Spark Java程序逻辑问题

时间:2018-04-20 05:24:22

标签: java apache-spark

我正在为当前项目做一个POC。我们想检查是否可以使用火花。

当前系统具有批处理流程,该流程从表中获取数据并根据批处理代码修改它们。

我是Apache spark的新手,作为POC的一部分,我正在使用

将CSV文件加载到DataFrame中
Dataset<Row> df = sparkSession.read().format("csv").option("header", true).option("inferSchema", true).load("C:/Users/xyz/Downloads/Apache spark installation and books/data.csv");

现在基于两列的值(现在在csv中)我需要填充第三列。

但是在早期的系统中,我们需要查询一个表,并根据这两个值来检索该表的第三列。

以及我们用于填充主表的那一列的值。

现在我有csv格式的主表,但我不知道如何保存其他表的数据,我需要根据主表中的两列来获取值。

你可以帮忙吗?

修改

更多信息:

从我目前的系统开始,我有两张表A和B

表A

col1 col2 col3

data1 data2 data3

表B

col1 col2 col3 col4 col5 col6 ....... coln

data1 data2 data3 data4 data5 data6 .......... datan

目前正在发生的事情是:

表A中列出了col2和col3。

表A中的col1也存在于表B中,但是具有空值。

所以表B中col 8和col9中的col2和col3值用于填充表B中的那一列,表A中的col1值为。

要使用Java在spark中执行此操作,我已为两个表创建了两个csv文件。 (这种方法是否正确?)并将它们加载到数据框中。

现在我不确定如何执行上述操作并更新包含表B的数据帧。

我希望它澄清一下。

1 个答案:

答案 0 :(得分:0)

您可以使用JDBC驱动程序查询表数据并加载到数据集中,然后对数据集使用联接操作来根据您的要求操作数据。

    Dataset<Row> jdbcDF = SparkSessionBuilder.instance().getSparkSession().read().format("jdbc")
.option("url", ConnectionString)
.option("driver", driver)
.option("dbtable", Query)
.option("user", username)
.option("password", password)
.load();