Spark - 地图转换

Posted

技术标签:

【中文标题】Spark - 地图转换【英文标题】:Spark - Map transformation 【发布时间】:2017-05-20 09:41:42 【问题描述】:

Map转换为什么将单行作为单个元素?

如果我从文本文件等外部数据集创建 RDD,它将单行作为单个元素?

有什么办法可以改变它,让它匹配一个模式而不是默认的单行?

我应该使用过滤器之类的其他转换吗?

如果我应该使用其他转换,为什么我们不能在 Map 中进行?

请帮帮我。

示例:

我的文件包含

映射是 Apache Spark 中应用的转换操作 到RDD的每个元素,并将结果作为新的RDD返回。在里面 地图操作开发者可以定义自己的自定义业务逻辑;这 相同的逻辑将应用于 RDD 的所有元素。地图功能 根据自定义代码将一个元素作为输入处理它 (由开发人员指定)并一次返回一个元素。地图 将一个长度为 N 的 RDD 转换为另一个长度为 N 的 RDD。输入 并且输出 RDD 通常具有相同数量的记录。

然后映射过程

第一个元素作为 [A map 是 Apache Spark 中的一种转换操作,应用于 RDD 的每个元素]

map 有什么方法可以让我将 [A map is a transformation operation in Apache Spark 应用于 RDD 的每个元素,并将结果作为新的 RDD 返回。] 作为单行。 [点阵模式匹配]

【问题讨论】:

【参考方案1】:

回答您的第一个问题: 不是map 函数一次占用single linemap 函数只是 transforming RDD(弹性分布式数据集)到其他 RDD 形式。它的sparkContextsqlContextSource 库逐行读取文本文件。 每个contexts 都在使用TextInputFormat 最初使用的Hadoop 类。而 TextInputFormatparses 使用 (\r or \n) 分隔符逐行读取输入文件,逐行读取文本文件。 现在 如果您想要自定义阅读格式,正如您在问题中提到的那样通过foolstop(.) 分隔来读取行,那么您将必须编写自定义inputFormat 类并告诉contexts 使用您的@ 987654344@班级。 我希望答案是明确的 已编辑 Ingesting data with Spark using a custom Hadoop FileInputFormat 和 Custom Input Format in Hadoop 和 simple image format converter 和 Using Custom Hadoop input format for processing binary file in Spark 应该会给您一个良好的开端来处理自定义 inputFormat

【讨论】:

谢谢。这说得通。如果您添加一些链接以参考更多内容,那将非常有帮助 @GopsAB,我更新了一些链接以便快速启动。

以上是关于Spark - 地图转换的主要内容,如果未能解决你的问题,请参考以下文章

如何解决嵌套地图函数中的 SPARK-5063

如何在 Python 中的 Spark Dataframe 上应用任何类型的地图转换

使用 Scala 将多列转换为 Spark Dataframe 上的一列地图

如何将地图 List<Map<String, String>> myList 列表转换为 Java 中的 Spark Dataframe?

Scala Spark 地图类型匹配问题

将地图 RDD 转换为数据框