当前位置: 首页 > 知识库问答 >
问题:

将每个文件激发到数据集行

何哲
2023-03-14

我在一个目录中有许多文件,每个文件包含跨多行的文本。目前,我使用以下代码将所有这些文件读取到spark数据集(

   val ddf = spark.read.text("file:///input/*")

但是,这会创建一个数据集,其中每一行都是一行,而不是一个文件。我希望数据集中每行都有一个文件(作为字符串)。

如何在不迭代每个文件并将其作为RDD单独读取的情况下实现这一点?

共有2个答案

严稳
2023-03-14

@mrsrinivas的答案的另一种选择是按输入文件名分组。鉴于结构:

evan@vbox>~/junk/so> find .        
.
./d2
./d2/t.txt
./d1
./d1/t.txt
 evan@vbox>~/junk/so> cat  */*.txt
d1_1
d1_2
d2_1
d2_2

我们可以根据输入文件收集列表,如下所示:

scala prettyprint-override">scala> val ddf = spark.read.textFile("file:///home/evan/junk/so/*").
     | select($"value", input_file_name as "fName")
ddf: org.apache.spark.sql.DataFrame = [value: string, fName: string]

scala> ddf.show(false)
+-----+----------------------------------+
|value|fName                             |
+-----+----------------------------------+
|d2_1 |file:///home/evan/junk/so/d2/t.txt|
|d2_2 |file:///home/evan/junk/so/d2/t.txt|
|d1_1 |file:///home/evan/junk/so/d1/t.txt|
|d1_2 |file:///home/evan/junk/so/d1/t.txt|
+-----+----------------------------------+

scala> ddf.groupBy("fName").agg(collect_list($"value") as "value").
     | drop("fName").show
+------------+
|       value|
+------------+
|[d1_1, d1_2]|
|[d2_1, d2_2]|
+------------+
蓝星辰
2023-03-14

在SparkContext上使用wholeTextFiles()

val rdd: RDD[(String, String)] = spark.sparkContext
                                      .wholeTextFiles("file/path/to/read/as/rdd")

SparkContext。wholeTextFiles允许您读取包含多个小文本文件的目录,并以(文件名、内容)对的形式返回每个小文本文件。这与textFile不同,textFile在每个文件中每行返回一条记录。

 类似资料:
  • 我有一个使用Java DSL配置的集成流,它使用从Ftp服务器中提取文件,然后将其转换为;然后我有一个方法,它触发我的批处理作业,所有的工作都是按要求进行的,但是Ftp文件夹中的每个文件都是按顺序运行的 我在Transformerendpoint中添加了它为每个文件打印相同的线程名称 这是我到现在为止所尝试的 1.任务执行器bean 感谢任何帮助 谢谢

  • 我正在使用一个表在Jaspersoft Studio 5.6.1中创建简单的报告。 通过 JRBeanCollectionDataSource 从 Java 向此报告发送数据。 在报告中,我已经可以获取此数据 vie 字段:报告- 现在我可以显示输入的数据了。 但如果我想在表中执行,我需要创建数据集(为什么?)并选择“使用用于填充主报告的相同连接”。将相同的字段添加到新数据集没有帮助,也没有为数据

  • 问题内容: 我正在寻找一种使用Python()将数据附加到文件内现有数据集的可能性。 我的项目的简短介绍:我尝试使用医学图像数据训练CNN。由于在将数据转换为NumPy数组的过程中大量数据和大量内存的使用,我需要将“转换”拆分为几个数据块:加载和预处理前100张医学图像,并将NumPy数组保存到hdf5文件,然后加载接下来的100个数据集并追加现有文件,依此类推。 现在,我尝试存储前100个转换的

  • 我有多个csv文件保存在一个文件夹中,具有相同的列布局,并希望将其作为pandas中的数据帧加载到python中。 这个问题与这条线索非常相似。 我使用以下代码: 还有更好的解决方案吗? 这需要很多时间。 谢啦

  • 问题内容: 我将多个csv文件保存在一个具有相同列布局的文件夹中,并希望将其作为pandas中的数据框加载到python中。 我正在使用以下代码: 是否有其他软件包更好的解决方案? 这需要很多时间。 谢谢 问题答案: 我建议使用列表理解:

  • 我有两个大约150 MB的大txt文件。我想从file1的每一行读取一些数据,并扫描file2的所有行,直到找到匹配的数据。如果没有找到匹配的数据,我希望将该行输出到另一个文件中。 选项2:使用上面提到的三个读取器对文件1中的每个记录读取文件2 n次。每次读取后,我必须关闭文件并再次读取。我在想最好的办法是什么。我还有别的选择吗