Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将多个文件解析为SparkRDD_Apache Spark_Java 8_Bigdata_Rdd - Fatal编程技术网

Apache spark 将多个文件解析为SparkRDD

Apache spark 将多个文件解析为SparkRDD,apache-spark,java-8,bigdata,rdd,Apache Spark,Java 8,Bigdata,Rdd,我们有多个数据结构如下的文件: file1.txt idUser: 34 Name: User1 Activity: 34 Comments: I like this idUser: 45 Name: User43 Activity: 12 Comments: I don'y like this activity idUser: 45 Name: User43 Activity: 678 Comments: I like this activity but not much fi

我们有多个数据结构如下的文件:

file1.txt

idUser: 34 
Name: User1
Activity: 34 
Comments: I like this 

idUser: 45
Name: User43
Activity: 12 
Comments: I don'y like this activity
idUser: 45
Name: User43
Activity: 678
Comments: I like this activity but not much 
file2.txt

idUser: 34 
Name: User1
Activity: 34 
Comments: I like this 

idUser: 45
Name: User43
Activity: 12 
Comments: I don'y like this activity
idUser: 45
Name: User43
Activity: 678
Comments: I like this activity but not much 
我们可以拥有数千个文件和数百万条记录。我们计划在Spark中使用这些文件进行数据分析

我加载的文件如下:

 JavaPairRDD<String, String> files = context.wholeTextFiles(inputPath); 
javapairdd files=context.wholeTextFiles(inputPath);

我想将此数据结构转换为
javapairdd如果需要将javapairdd数据结构转换为具有不同数据结构的javapairdd,可以使用
.mapToPair()
命令

例如:

JavaPairRDD<Integer, List<UserActivity>> newStruct = files.mapToPair(new MyConverter());

public class MyConverter implements PairFunction<Tuple2<Tuple2<String, String>, Long>, Integer, List<UserActivity>> {
    public Tuple2<Integer, List<UserActivity>> call(Tuple2<Tuple2<<String, String>, Long> val) {
        return ...
    }
}
javapairdd newStruct=files.mapToPair(新的MyConverter());
公共类MyConverter实现PairFunction{

公共Tuple2调用(Tuple2如果需要将javapairdd数据结构转换为具有不同数据结构的javapairdd,可以使用
.mapToPair()
命令进行转换

例如:

JavaPairRDD<Integer, List<UserActivity>> newStruct = files.mapToPair(new MyConverter());

public class MyConverter implements PairFunction<Tuple2<Tuple2<String, String>, Long>, Integer, List<UserActivity>> {
    public Tuple2<Integer, List<UserActivity>> call(Tuple2<Tuple2<<String, String>, Long> val) {
        return ...
    }
}
javapairdd newStruct=files.mapToPair(新的MyConverter());
公共类MyConverter实现PairFunction{

公共Tuple2调用(Tuple2为什么您想要一个
javapairdd
?您不认为
javapairdd
就足够了吗?我认为它可以让您避免以后的许多问题


如果您想在另一个JavaPairdd中转换JavaPairdd,您可以使用映射,请参见为什么需要
JavaPairdd
?您不认为
JavaPairdd
就足够了吗?我认为这将允许您避免以后出现的许多问题



如果您想在另一个JavaPairDD中转换JavaPairDD,您可以使用映射,请参见

您没有描述问题中的
UserActivity
是什么。另外,您为什么要使用
zipWithIndex
UserActivity
是包含以下信息的对象
idUser:34 Name:User1 Activity:34条评论:我喜欢这个
。我们使用zipWithIndex进行快速阅读。您使用
zipWithIndex
进行快速阅读?这对我来说毫无意义……无论如何,我建议您研究
reduceByKey
以实现您的目标:)我现在遇到的主要问题是,当您读取pairdd时,您会得到一个字符串,文件的字符串对象名称,文件的所有内容都在一行中。使用split(“\n”)解析内容的方法是什么要获取UserActivity对象?。您没有描述问题中的
UserActivity
是什么。另外,您为什么要使用
ZipWithinIndex
UserActivity
是包含以下信息的对象
idUser:34 Name:User1 Activity:34注释:我喜欢这个
。我们使用了zipWithIn用于快速阅读的索引。您使用
zipWithIndex
进行快速阅读?这对我来说毫无意义……无论如何,我建议您查看
reduceByKey
以实现您的目标:)我现在遇到的主要问题是,当您读取pairdd时,您会得到一个字符串,文件的字符串对象名称,文件的所有内容都在一行中。使用split(“\n”)解析内容的方法是什么若要获取UserActivity对象?.Hi@alexM如果我删除zipWithIndex,您可以更新您的示例吗。只需为您的问题添加一个更新,我就会为我的答案添加一个更新。@ypriverolI已经更新了我的问题,删除了zipWithIndex。@ypriverol但是现在您的结果(文件)应该是JavaRDD,而不是JavaPairRDD(并且具有不同的结构).Yes是真的,我已经更改为a
javapairdd
Hi@alexM如果我删除zipWithIndex,你能更新你的例子吗。只需给你的问题添加一个更新,我就会给我的答案添加一个更新。@ypriverolI已经更新了我删除zipWithIndex的问题。@ypriverol但是现在你的结果(文件)应该是JavaRDD,而不是javapairdd(并且具有不同的结构)是的,我已经改成了一个
javapairdd
。问题是,这个整数将允许我在用户级别进行处理,这对性能非常有好处。我想?因为我可以使用用户的粒度来执行某些特定的算法,只对某些类型的用户执行。对你有意义吗?我不确定我是否理解co没错。但是如果你的整数代表一个用户,那么拥有一个JavaPairdd是没有问题的。你只需要在JavaPairdd上使用一个过滤函数。使用JavaPairdd的问题是你禁止spark以它想要的方式处理数据。你强制它在同一个分区上拥有大量数据。如果你有一个用户的活动为10,该怎么办另一个是数千。我想那数千只需要在一个分区上。但这会使我的算法更快。不?如果1000在同一分区而不是分布的分区上。不,因为你必须一次处理一个元素。我从来没有使用过,这可能对你有帮助。问题是,这个整数将允许我执行进程在用户级别进行essing对性能来说是非常好的。我认为?因为我可以使用用户的粒度来执行某些特定的算法,只对某些类型的用户执行。对你来说有意义吗?我不确定我是否理解正确。但是如果你的整数代表一个用户,那么拥有一个JavaPairdd就没有问题。你只需要给我们一个筛选函数在你的JavaPairdd上。使用JavaPairdd的问题是你禁止spark以它想要的方式处理数据。你强迫它在同一个分区上有很多数据。如果你有一个用户有10个UserActivity,而另一个用户有数千个UserActivity,那会怎么样呢?我认为这数千个用户只能在一个分区上。但这会使我的算法aster否?如果1000在同一个分区而不是分布式分区中。否,因为您必须一次处理一个元素。或者我从未使用过,这可能会对您有所帮助。