【发布时间】:2018-04-20 07:24:52
【问题描述】:
我必须使用 DataFrame2 将 DataFrame1 中可用的值插入到具有空值的列之一中。基本上更新 DataFrame2 中的列。
两个 DataFrame 都有 2 个公共列。
有没有办法使用 Java 做同样的事情?或者可以有不同的方法?
示例输入:
1) 文件 1.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) 文件2.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 并将两个文件的数据都加载到其中,现在我不知道如何继续。
编辑
基本上我想清楚以下三个步骤:
- 如何从 File2.csv 中获取 BILL_NBR 和 BILL_NBR_TYPE_CD 值?
对于这一步我写了:file2Df.select("BILL_NBR_TYPE_CD","BILL_NBR");
如何根据 step1 中检索到的值从 File1.csv 中获取 BILL_ID 值?
如何在 File2.csv 中相应地更新 BILL_ID 值?
我是火花新手,如果有人可以指点,我将不胜感激。
【问题讨论】:
-
这是一个简单的 SQL 连接问题。在
df1和df2然后从df1或df2span>之间进行选择 -
@philantrovert 谢谢指出......但是可以基于两列进行内连接吗?我正在检查 API 是否相同。 File2 中的 BILL_ID 列也是空的,它会去哪里?
-
@philantrovert 我已经尝试过数据集
加入 = txnDf.join(accountDf,txnDf.col("BILL_NBR").equalTo(accountDf.col("BILL_NBR")).and(txnDf. col("BILL_NBR_TYPE_CD").equalTo(accountDf.col("BILL_NBR_TYPE_CD"))),"inner");根据您的建议,但收到此错误:线程“主”org.apache.spark.sql.AnalysisException 中的异常:插入分配和书籍/输出文件/Transformed23Apr.csv 时发现重复列:
bill_nbr,@987654335 @,bill_nbr_type_cd;
标签: java apache-spark spark-dataframe