我有两个RDD
来包装以下数组:
Array((3,Ken), (5,Jonny), (4,Adam), (3,Ben), (6,Rhonda), (5,Johny))
Array((4,Rudy), (7,Micheal), (5,Peter), (5,Shawn), (5,Aaron), (7,Gilbert))
我需要设计一个代码,如果我提供输入为3,我需要返回
Array((3,Ken), (3,Ben))
如果输入为6,则输出应为
Array((6,Rhonda))
我试过这样的事情:
val list3 = list1.union(list2)
list3.reduceByKey(_+_).collect
list3.reduceByKey(6).collect
这些都不起作用,任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
鉴于以下情况,您必须自己定义
// Provide you SparkContext and inputs here
val sc: SparkContext = ???
val array1: Array[(Int, String)] = ???
val array2: Array[(Int, String)] = ???
val n: Int = ???
val rdd1 = sc.parallelize(array1)
val rdd2 = sc.parallelize(array2)
您可以使用union
和filter
来实现目标
rdd1.union(rdd2).filter(_._1 == n)
由于按键过滤是您可能希望在多种情况下进行的过程,因此将此功能封装在自己的函数中是有意义的。
如果我们可以确保此函数可以在任何类型的键上工作,而不仅仅是Int
s。
您可以在旧的RDD
API中表达这一点,如下所示:
def filterByKey[K, V](rdd: RDD[(K, V)], k: K): RDD[(K, V)] =
rdd.filter(_._1 == k)
您可以按如下方式使用它:
val rdd = rdd1.union(rdd2)
val filtered = filterByKey(rdd, n)
让我们更详细地看一下这个方法。
此方法允许包含通用对的filterByKey
和RDD
,其中第一个项的类型为K
,第二个类型的类型为V
(来自键和值)。它还接受K
类型的密钥,该密钥将用于过滤RDD
。
然后使用filter
函数,该函数将谓词(某种类型的函数 - 在本例中为K
- 转换为Boolean
)并确保结果RDD
仅包含尊重此谓词的项目。
我们也可以将函数体写为:
rdd.filter(pair => pair._1 == k)
或
rdd.filter { case (key, value) => key == k }
但我们利用_
通配符来表达我们想要对此匿名函数的第一个(也是唯一的)参数进行操作的事实。
要使用它,首先parallelize
RDD
,union
,然后调用filterByKey
,然后调用<?php
$usn=$_GET['usn'];
$con=mysqli_connect('localhost','root','','library');
$sql="select count(*) from book_fine where usn='$usn'";
$res=mysqli_query($con,$sql);
$row=mysqli_fetch_array($res);
if($row[0]>0)
{
$sql="select * from book_fine where usn='$usn'";
$res=mysqli_query($con,$sql);
echo '<html><form><table class="table table-bordered">
<tr>
<th><input type="checkbox" name="check_all" id="check_all" value=""/></th>
<th>USN</th>
<th>Trans No</th>
<th>Acc No</th>
<th>category</th>
<th>description</th>
<th>issue_date</th>
<th>due_date</th>
<th>renewed</th>
<th>fine</th>
</tr>
';
while($row=mysqli_fetch_array($res)){
?>
<tr><td><input type="checkbox" name="selected_id[]" class="checkbox" value="<?php echo $usn; ?>"/></td>
<?php echo" <td>".$row[0]."</td>
<td>".$row[1]."</td>
<td>".$row[2]."</td>
<td>".$row[3]."</td>
<td>".$row[4]."</td>
<td>".$row[5]."</td>
<td>".$row[6]."</td>
<td>".$row[7]."</td>
<td>".$row[8]."</td>
</tr></form></html>";
}
echo "</table>";
}else{
echo "string";
}
函数,并输入要过滤的数字(如示例中显示。)