Apache Spark:如何使用Java在dataFrame中使用空值插入数据

时间:2018-04-20 07:24:52

标签: java apache-spark spark-dataframe

我必须将 DataFrame1 中可用的值插入到具有 DataFrame2 的空值的列中。基本上更新 DataFrame2 中的列。

两个DataFrame都有2个常用列。

有没有办法使用Java做同样的事情?或者可以有不同的方法?

示例输入:

1)File1.csv

BILL_ID,BILL_NBR_TYPE_CD,BILL_NBR,VERSION,PRIM_SW
0501841898,BIN     ,404154,1000,Y
0681220958,BIN     ,735332,1000,Y
5992410180,BIN     ,454680,1000,Y
6995270884,SREBIN  ,1000252750295575,1000,Y

此处BILL_ID是系统ID,BILL_NBR是外部ID。

2)File2.csv

TXN_ID,TXN_TYPE,BILL_ID,BILL_NBR_TYPE_CD,BILL_NBR
01234, ABC     ,"     ",BIN     ,404154
22365, XYZ     ,"     ",BIN     ,735332
45890, LKJ     ,"     ",BIN     ,454680
23456, MPK     ,"     ",SREBIN  ,1000252750295575

示例输出

如下所示BILL_ID值应填入File2.csv

01234, ABC     ,501841898,BIN     ,404154
22365, XYZ     ,681220958,BIN     ,735332
45890, LKJ     ,5992410180,BIN     ,454680
23456, MPK     ,6995270884,SREBIN  ,1000252750295575

我创建了两个DataFrame并将两个文件的数据加载到其中,现在我不知道如何继续。

修改

基本上我想要明确以下三个步骤:

  1. 如何从File2.csv获取BILL_NBR和BILL_NBR_TYPE_CD值?
  2. 对于这一步,我写了:file2Df.select("BILL_NBR_TYPE_CD","BILL_NBR");

    1. 如何根据步骤1中检索到的值从File1.csv获取BILL_ID值?

    2. 如何在File2.csv中相应更新BILL_ID值?

    3. 我是新手,如果有人可以指点,我会很感激。

1 个答案:

答案 0 :(得分:0)

您需要根据BILL_NBR列加入两个表。

假设: BILL_NBRBILL_ID列之间存在一对一关系。

假设您的File1.csv和File2.csv的数据框名称分别为file1DFfile2DF,则以下内容适用于您:

Dataset<Row> file1DF = file1DF.select("BILL_ID","BILL_NBR","BILL_NBR_TYPE_CD");
Dataset<Row> file2DF = file2DF.select("TXN_ID","TXN_TYPE","BILL_NBR_TYPE_CD","BILL_NBR");
Dataset<Row> file2DF = file2DF.join(file1DF, file1DF("BILL_NBR","BILL_NBR_TYPE_CD"));

注意:我没有资源通过运行来测试上面的代码。如果您遇到任何编译时间或运行时错误,请告诉我。