Java 如何将Spark行的数据集转换为字符串?
我已经编写了使用SparkSQL访问配置单元表的代码。代码如下:Java 如何将Spark行的数据集转换为字符串?,java,string,apache-spark,apache-spark-sql,apache-spark-dataset,Java,String,Apache Spark,Apache Spark Sql,Apache Spark Dataset,我已经编写了使用SparkSQL访问配置单元表的代码。代码如下: SparkSession spark = SparkSession .builder() .appName("Java Spark Hive Example") .master("local[*]") .config("hive.metastore.uris", "thrift://localhost:9083") .enableHiveSupport
SparkSession spark = SparkSession
.builder()
.appName("Java Spark Hive Example")
.master("local[*]")
.config("hive.metastore.uris", "thrift://localhost:9083")
.enableHiveSupport()
.getOrCreate();
Dataset<Row> df = spark.sql("select survey_response_value from health").toDF();
df.show();
SparkSession spark=SparkSession
.builder()
.appName(“Java Spark配置单元示例”)
.master(“本地[*]”)
.config(“hive.metastore.uris”thrift://localhost:9083")
.enableHiveSupport()
.getOrCreate();
数据集df=spark.sql(“从运行状况中选择调查响应值”).toDF();
df.show();
我想知道如何将完整的输出转换为字符串或字符串数组?因为我正在尝试使用另一个模块,其中只有我可以传递字符串或字符串类型数组值。我尝试过其他方法,如
.toString
或将类型转换为字符串值。但对我不起作用。请告诉我如何将数据集值转换为字符串?您可以使用该函数将每一行转换为字符串,例如:
df.map(row => row.mkString())
当然,你可以做更复杂的工作,而不仅仅是简单的工作
然后,该方法可以将整个内容检索到一个数组中
val strings = df.map(row => row.mkString()).collect
(这是Scala语法,我认为在Java中非常类似)以下是Java中的示例代码
public class SparkSample {
public static void main(String[] args) {
SparkSession spark = SparkSession
.builder()
.appName("SparkSample")
.master("local[*]")
.getOrCreate();
//create df
List<String> myList = Arrays.asList("one", "two", "three", "four", "five");
Dataset<Row> df = spark.createDataset(myList, Encoders.STRING()).toDF();
df.show();
//using df.as
List<String> listOne = df.as(Encoders.STRING()).collectAsList();
System.out.println(listOne);
//using df.map
List<String> listTwo = df.map(row -> row.mkString(), Encoders.STRING()).collectAsList();
System.out.println(listTwo);
}
}
公共类SparkSample{
公共静态void main(字符串[]args){
火花会话火花=火花会话
.builder()
.appName(“SparkSample”)
.master(“本地[*]”)
.getOrCreate();
//创建df
List myList=Arrays.asList(“一”、“二”、“三”、“四”、“五”);
Dataset df=spark.createDataset(myList,Encoders.STRING()).toDF();
df.show();
//使用df.as
List listOne=df.as(Encoders.STRING()).collectAsList();
System.out.println(listOne);
//使用df.map
List listwo=df.map(row->row.mkString(),Encoders.STRING()).collectAsList();
System.out.println(列表二);
}
}
“row”是java 8 lambda参数。请检查如果您计划逐行读取数据集,则可以在数据集上使用迭代器:
Dataset<Row>csv=session.read().format("csv").option("sep",",").option("inferSchema",true).option("escape, "\"").option("header", true).option("multiline",true).load(users/abc/....);
for(Iterator<Row> iter = csv.toLocalIterator(); iter.hasNext();) {
String item = (iter.next()).toString();
System.out.println(item.toString());
}
Datasetcsv=session.read();
for(迭代器iter=csv.tolocaterator();iter.hasNext();){
字符串项=(iter.next()).toString();
System.out.println(item.toString());
}
要将sparkSession设置为单个字符串,您可以在sparkSession中执行以下操作:
sparkSession.read.textFile(filePath).collect.mkString
假设您的数据集类型为String:Dataset[String]它不起作用,我的朋友。你能帮我用java而不是Scala吗。我知道语法有点类似,但是当我们使用java而不是java时,还有其他问题Scala@JafferJava8语法应该非常简单similar@cricket_007谢谢你的建议。这很有帮助。请你解释一下程序中这一行是什么?您的代码在我看来非常优化。“row”是Java8lambda参数。请检查它是否完美。谢谢。当我使用df.as时,我遇到了这个错误。线程“main”org.apache.spark.sql.AnalysisException中出现异常:尝试将struct映射到Tuple1,但由于字段数不一致而失败。;