Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
如何在没有withColumn的情况下将Spark数据集的所有列强制转换为Java中的字符串?_Java_Apache Spark_Casting - Fatal编程技术网

如何在没有withColumn的情况下将Spark数据集的所有列强制转换为Java中的字符串?

如何在没有withColumn的情况下将Spark数据集的所有列强制转换为Java中的字符串?,java,apache-spark,casting,Java,Apache Spark,Casting,我已尝试使用此处指定的withColumn解决方案: 但是,该解决方案对大量列(1k-6k)的性能产生了影响。它需要6个多小时,然后被中止 或者,我尝试使用map进行如下转换,但我在这里遇到错误: MapFunction<Column, Column> mapFunction = (c) -> { return c.cast("string"); }; dataset = dataset.map(mapFunction, Encode

我已尝试使用此处指定的withColumn解决方案:

但是,该解决方案对大量列(1k-6k)的性能产生了影响。它需要6个多小时,然后被中止

或者,我尝试使用map进行如下转换,但我在这里遇到错误:

MapFunction<Column, Column> mapFunction = (c) -> {
    return c.cast("string");
};      

dataset = dataset.map(mapFunction, Encoders.bean(Column.class));

您确定是指1k-6k列还是指行

但在任何情况下,我通常都会这样投射列:

import spark.implicits._

val df = Seq((1, 2), (2, 3), (3, 4)).toDF("a", "b")

val cols = for {
  a <- df.columns
} yield col(a).cast(StringType)

df.select(cols : _*)
导入spark.implicits_
val df=序列((1,2)、(2,3)、(3,4)).toDF(“a”、“b”)
val cols=用于{

a为任何寻求此解决方案的人找到了以下解决方案:

String[] strColNameArray = dataset.columns();
List<Column> colNames = new ArrayList<>();
for(String strColName : strColNameArray){
    colNames.add(new Column(strColName).cast("string"));
}
dataset = dataset.select(JavaConversions.asScalaBuffer(colNames));`
String[]strColNameArray=dataset.columns();
List colNames=new ArrayList();
for(字符串strColName:strColNameArray){
添加(新列(strColName).cast(“字符串”);
}
dataset=dataset.select(JavaConversions.asScalaBuffer(colNames))`

谢谢Matt。但这是在Scala中。我需要Java的代码段。但我后来才弄明白。我使用了:
String[]strColNameArray=dataset.columns();
List colNames=new ArrayList();
for(String strColName:strColNameArray){
colNames.add(new Column(strColName).cast(“String”));
}
dataset=dataset.select(JavaConversions.asScalaBuffer(colNames));
sry关于这一点,我似乎没有完全阅读您的问题无需担心!感谢您的帮助!
import spark.implicits._

val df = Seq((1, 2), (2, 3), (3, 4)).toDF("a", "b")

val cols = for {
  a <- df.columns
} yield col(a).cast(StringType)

df.select(cols : _*)
String[] strColNameArray = dataset.columns();
List<Column> colNames = new ArrayList<>();
for(String strColName : strColNameArray){
    colNames.add(new Column(strColName).cast("string"));
}
dataset = dataset.select(JavaConversions.asScalaBuffer(colNames));`