gpt4 book ai didi

java - JavaSparkContext.wholeTextFiles 的数据集 API 模拟

转载 作者:行者123 更新时间:2023-11-30 02:29:19 28 4
gpt4 key购买 nike

我们可以调用JavaSparkContext.wholeTextFiles并得到JavaPairRDD<String, String> ,其中第一个字符串是文件名,第二个字符串是整个文件内容。 Dataset API中是否有类似的方法,或者我所能做的就是将文件加载到JavaPairRDD中然后转换为数据集(这是有效的,但我正在寻找非 RDD 解决方案)。

最佳答案

如果您想使用 Dataset API,则可以使用 spark.read.text("path/to/files/")。请查看here了解 API 详细信息。请注意,使用 text() 方法返回 Dataframe,其中“文本文件中的每一行都是生成的 DataFrame 中的一个新行”。因此 text() 方法将提供文件内容。为了获取文件名,您必须使用 input_file_name() 函数。

import static org.apache.spark.sql.functions.input_file_name;
Dataset<Row> ds = spark.read().text("c:\\temp").withColumnRenamed("value", "content").withColumn("fileName", input_file_name());
ds.show(false);

如果您想连接同一文件中的行,使其类似于整个文件内容,则需要在 fileName 列上使用 groupBy 函数以及 concat_wscollect_list 函数。

import static org.apache.spark.sql.functions.col;
import static org.apache.spark.sql.functions.concat_ws;
import static org.apache.spark.sql.functions.collect_list;
ds = ds.groupBy(col("fileName")).agg(concat_ws("",collect_list(ds.col("content"))).as("content"));
ds.show(false);

关于java - JavaSparkContext.wholeTextFiles 的数据集 API 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44651742/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com