给定一个元素为二元组(字符串,整型)的RDD,统计每个字符串出现的次数并输出结果。
时间: 2023-08-24 17:21:33 浏览: 250
可以使用以下代码实现:
```python
rdd = sc.parallelize([("hello", 1), ("world", 2), ("hello", 3), ("spark", 4), ("hello", 5)])
result = rdd.map(lambda x: (x[0], x[1])).reduceByKey(lambda x, y: x + y)
print(result.collect())
```
首先使用parallelize方法创建一个二元组类型的RDD,然后使用map方法将每个元组映射为一个新的二元组,第一个元素为字符串,第二个元素为整型。接着使用reduceByKey方法对相同字符串的整型进行累加,最终得到每个字符串出现次数的统计结果。最后使用collect方法将结果收集到Driver端并输出。
相关问题
给定一个元素为字符串类型的RDD,统计其中每个字符串的长度,并将结果按照长度从小到大排序输出。
好的,可以使用以下代码实现:
```python
rdd = sc.parallelize(["hello", "world", "spark", "python", "big data"])
result = rdd.map(lambda x: (len(x), x)).sortByKey().map(lambda x: (x[1], x[0]))
print(result.collect())
```
首先使用parallelize方法创建一个字符串类型的RDD,然后使用map方法将每个字符串映射为一个元组,元组第一个元素为字符串长度,第二个元素为字符串本身。接着使用sortByKey方法按照元组的第一个元素进行排序,最后使用map方法将元组转换为指定格式的输出结果。最终使用collect方法将结果收集到Driver端并输出。
(编程题)给定一个元素为字符串类型的RDD,统计其中每个字符串的长度,并将结果按照长度从小到大排序输出。
以下是Scala语言的实现代码:
```scala
val rdd = sc.parallelize(Seq("hello", "world", "spark", "scala", "java", "python"))
val counts = rdd.map(str => (str.length, str)).sortByKey().map(tuple => (tuple._2, tuple._1))
counts.foreach(println)
```
首先,我们创建一个元素为字符串类型的RDD。然后,使用map操作将每个字符串映射为一个以字符串长度为key、字符串本身为value的元组。接着,使用sortByKey操作按照key(即字符串长度)从小到大排序。最后,使用map操作将元组中的key和value交换位置,输出结果即可。
输出结果如下所示:
```
(java,4)
(scala,5)
(python,6)
(spark,5)
(world,5)
(hello,5)
```
注意,这里的输出结果是按照字符串长度从小到大排序的。如果需要按照长度从大到小排序,只需要将sortByKey操作改为sortByKey(false)即可。
阅读全文