Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Spark行的数据集转换为字符串?_Java_String_Apache Spark_Apache Spark Sql_Apache Spark Dataset - Fatal编程技术网

Java 如何将Spark行的数据集转换为字符串?

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

我已经编写了使用SparkSQL访问配置单元表的代码。代码如下:

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,但由于字段数不一致而失败。;