如何使用 mapPartitions 函数将 Rdd 转换为数据集

Posted

技术标签:

【中文标题】如何使用 mapPartitions 函数将 Rdd 转换为数据集【英文标题】:How to convert Rdd to dataset using mapPartitions Function 【发布时间】:2019-10-06 08:06:09 【问题描述】:

我正在尝试将 java spark RDD 转换为数据集。

根据火花文档。 mapPartitions 比 map 函数快。

这将有助于提高火花的性能。

【问题讨论】:

不相信你的假设和答案和问题齐头并进 convert RDD to Dataset in Java Spark的可能重复 或***.com/questions/41302666/… 【参考方案1】:

下面是java代码。

JavaRDD<UserData> UserRowRDD = userSuccessRDD.mapPartitions(new FlatMapFunction<Iterator<String>, UserData>() 

            @Override
            public Iterator call(Iterator<String> input) throws Exception 
                List<UserData> result = new ArrayList<>();
                while (input.hasNext()) 
                    result.add(Util.getEnrichedUser(UserHeader, input.next()));
                
                return result.iterator();
            
        );

public static UserData getEnrichedUser(String[] header, String rddString) 

                    String[] parts = rddString.split("\\^");
                    UserData output = new UserData();
                    for (int i = 0; i < parts.length; i++) 
                        try 
                            BeanUtils.setProperty(output, header[i], parts[i]);
                         catch (IllegalAccessException | InvocationTargetException e) 
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        
                    
                    return output;

    

【讨论】:

以上是关于如何使用 mapPartitions 函数将 Rdd 转换为数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何将列添加到 mapPartitions 内的 org.apache.spark.sql.Row

如何将类成员函数传递给 3rd 方库中的方法?

Spark mapPartitions 及mapPartitionsWithIndex算子

将rdd转换为数据框时,pyspark对mapPartitions使用一项任务

spark中map与mapPartitions区别

[Spark精进]必须掌握的4个RDD算子之mapPartitions算子