Spark-获取RDD中的文件名

Vip*_*ran 12 apache-spark

我正在尝试处理每天都在不断增长的4个文本文件目录.我需要做的是,如果有人试图搜索发票号,我应该给他们提供它的文件列表.

通过将它们加载为RDD,我能够映射和减少文本文件中的值.但是,如何获取文件名和其他文件属性?

zer*_*323 28

从Spark 1.6开始,您可以将text数据源和input_file_name功能组合如下:

斯卡拉:

import org.apache.spark.sql.functions.input_file_name

val inputPath: String = ???

spark.read.text(inputPath)
  .select(input_file_name, $"value")
  .as[(String, String)] // Optionally convert to Dataset
  .rdd // or RDD
Run Code Online (Sandbox Code Playgroud)

Python:

(2.x之前的版本有错误,转换为RDD时可能无法保留名称):

from pyspark.sql.functions import input_file_name

(spark.read.text(input_path)
    .select(input_file_name(), "value"))
    .rdd)
Run Code Online (Sandbox Code Playgroud)

这也可以与其他输入格式一起使用.


小智 5

如果你在 pyspark 中,你可以试试这个:

    test = sc.wholeTextFiles("pathtofile")
Run Code Online (Sandbox Code Playgroud)

你会得到一个结果 RDD,第一个元素 = 文件路径,第二个元素 = 内容


Mik*_*ark 4

如果您的文本文件足够小,您可以使用SparkContext.wholeTextFiles它返回(filename,content).

  • 在 1.6+ 中,无需读取完整文件实际上是可能的。 (2认同)