有两个数据帧。为简单起见,我把它们如下:
DataFrame1
.controller('MyCtrl', function($scope,$timeout) {
$scope._printBarCode = function(printSectionId) {
var innerContents = document.getElementById(printSectionId).innerHTML;
var popupWindow = window.open('', 'Print');
popupWindow.document.write('<!DOCTYPE html><html><head><style type="text/css">@media print { body { -webkit-print-color-adjust: exact; } }</style><link rel="stylesheet" type="text/css" href="barcode.css" media="all" /></head><body> ' + innerContents + '</body></html>');
$timeout(function() {
popupWindow.focus();
popupWindow.print();
popupWindow.close();
});
};
DataFrame2
<input type="button" value="Prnt" ng-click="_printBarCode('barCodeId')" class="btn btn-primary" />
<div id="barCodeId" class="barcodeplace">
<div class="col-sm-12">
<div barcode-generator="{{_barCodeGeneraterId}}" style="height:20px;">
</div>
</div>
</div>
我想加入id | name
-----------
0 | Mike
1 | James
上的两个DataFrame,只保留 DataFrame1 中的列id | name | salary
-------------------
0 | M | 10
1 | J | 20
2 | K | 30
,如果没有相应的id
,则保留原始列name
在 DataFrame2 。
应该是:
id
到目前为止,我只知道如何通过以下方式加入两个数据帧:
id | name | salary
--------------------
0 | Mike | 10
1 | James | 20
2 | K | 30
但它会使用null来忽略名称值&#34; K&#34;。
谢谢!
答案 0 :(得分:2)
替换空值,您可以使用DataFrameNaFunctions,如下所示......
df1.join(df2, df1("id")===df2("id"), "left_outer")
.select(df2("id"), df1("name"), df2("salary"))
.na.fill(ImmutableMap.of("name", "unknown")).show()
其中'unknown'是样本值。你可以用你想要的价值取代......
如果您不希望行具有空值列
val joined = df1.join(df2, df1("id")===df2("id"), "left_outer")
.select(df2("id"), df1("name"), df2("salary"))
val final = joined.where(joined.col("name").isNotNull)
final.show()
另请注意,正如@Tzach Zohar中提到的那样
def coalesce(e: Column*)
功能
返回非空的第一列,如果所有输入都为null,则返回null 空。
如果您正在寻找那种......那么您可以继续。