加载数据:
SparkConf sc= new SparkConf().setAppName("TEST").setMaster("local[*]");
JavaSparkContext JSC = new JavaSparkContext(sc);
JavaRDD<String> stringRDDVotes = JSC.textFile("HarryPotter.csv");
我当前已将此表加载到rdd中:
idabname12350harry;波特
我想把它转换成下表:
idabname12350harry12350potter公司
我找到的所有解决方案都使用我不能使用的sparksql,那么我如何只使用 flatMap
以及 mapToPair
.
像这样的可能?
flatMap(s -> Arrays.asList(s.split(";")).iterator())
上面的代码生成:
idabname12350harrypotter公司
我知道在scala中可以这样做,但我不知道如何使用java:
val input: RDD[String] = sc.parallelize(Seq("1,23,50,Harry;Potter"))
val csv: RDD[Array[String]] = input.map(_.split(','))
val result = csv.flatMap { case Array(s1, s2, s3, s4) => s4.split(";").map(part => (s1, s2, s3, part)) }
1条答案
按热度按时间wz3gfoph1#
第一部分很容易从scala转换到java,您只需要使用
map
用逗号分隔每行以得到JavaRDD<String[]>
. 然后使用flatMap
,对于每一行,拆分对应于Name
,并使用java流,可以将names列表的每个元素转换为新的列表。下面是一个完整的示例: