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 读取多行文本文件_Apache Spark_Hdfs - Fatal编程技术网

Apache spark 读取多行文本文件

Apache spark 读取多行文本文件,apache-spark,hdfs,Apache Spark,Hdfs,给定以下数据集: 电影ID:abgh 电影名称:泰坦尼克号 审核人:约翰·史密斯 分数:3.5 电影ID:adsa 电影名称:朱曼吉 审核人:Mary Jo 分数:4.5 …(假设数据位于单个文本文件中,其中始终有4行表示一个条目) 在一个小文本文件中,我们试图使用Spark对数据集进行一些分析,以获得每个电影ID的平均分数,我的讲师建议如下: 将文本文件作为RDD读取 使用过滤器创建2个乐谱和电影ID的RDD,即 val movieID=RDD1.filter(z=>z.contains(“

给定以下数据集:

电影ID:abgh
电影名称:泰坦尼克号
审核人:约翰·史密斯
分数:3.5

电影ID:adsa
电影名称:朱曼吉
审核人:Mary Jo
分数:4.5

…(假设数据位于单个文本文件中,其中始终有4行表示一个条目)
在一个小文本文件中,我们试图使用Spark对数据集进行一些分析,以获得每个电影ID的平均分数,我的讲师建议如下:

  • 将文本文件作为RDD读取

  • 使用过滤器创建2个乐谱和电影ID的RDD,即
    val movieID=RDD1.filter(z=>z.contains(“movieID”)).map(u.split(“:”)).map(z=>z(1))

    val score=RDD1.filter(z=>z.contains(“score”)).map(u.split(“:”).map(z=>z(1.toFloat)

  • 从(2)中,将两个RDD压缩在一起,我将得到每行的电影ID与分数的状态。
    val zip\u rdd=movieID.zip(分数)

    val mean_score=zip_rdd.mapValues(value=>(value,1)).reduceByKey{case((sumL,countL),(sumR,countR))=>(sumL+sumR,countL+countR)}.mapValues{case(sum,count)=>sum/count}

    我想知道既然数据是在Spark中分区的,我们能保证数据是按顺序读取的吗?电影ID和配乐来自同一评论?
    提前谢谢你的帮助

  • 编辑:如果不清楚,我可以确定
    zip\u rdd
    中的键/值对来自同一审查吗?我现在使用的是psuedo集群(Hortonworks sandbox),但我想知道如果数据大小急剧增大,是否会有任何变化,我最终会使用集群来计算它


    来自Spark新手。

    这很好,因为从磁盘读取可以保持秩序。过滤器是一种窄变换。zip依赖于这个事实。在压缩之前没有广泛的转换


    或者,您可以zipWithIndex,然后根据需要以适当的方式加入压缩值。这是一个狭窄的转换,因此没有问题。

    感谢您的回复。但是如果我们将文件存储在hdfs中呢?那没关系。不确定我是否正确理解hdfs,但如果文件是超大的,即千兆字节大小,它仍然会确保秩序得到保留吗?那么你还有什么希望呢?我在想,需要一个更繁琐的处理步骤来确保分数和id同步。但我猜在这个有限的例子中,讲师没有错。谢谢我接受这个答案。