如何在java中使用spark Dataframe读取没有列名的文本文件
我正在使用如何在java中使用spark Dataframe读取没有列名的文本文件,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我正在使用SparkDataFrame读取一个文本文件,每一行由一个空格分隔,如下所示(路径:d:/data/kmeans\u data.txt): 我正在尝试使用DataFrame读取此文本文件: Dataset<Row> dataset = spark.read().text("file:/d:/data/kmeans_data.txt"); Dataset Dataset=spark.read().text(“文件:/d:/data/kmeans_data.txt”); 但
Spark
DataFrame
读取一个文本文件,每一行由一个空格分隔,如下所示(路径:d:/data/kmeans\u data.txt
):
我正在尝试使用DataFrame
读取此文本文件:
Dataset<Row> dataset = spark.read().text("file:/d:/data/kmeans_data.txt");
Dataset Dataset=spark.read().text(“文件:/d:/data/kmeans_data.txt”);
但是,它调用一个IllegalArgumentException
:
线程“main”java.lang.IllegalArgumentException:字段“features”中不存在异常。
可用字段:值
位于org.apache.spark.sql.types.StructType$$anonfun$apply$1.apply(StructType.scala:267)
位于org.apache.spark.sql.types.StructType$$anonfun$apply$1.apply(StructType.scala:267)
位于scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
位于scala.collection.AbstractMap.getOrElse(Map.scala:59)
位于org.apache.spark.sql.types.StructType.apply(StructType.scala:266)
位于org.apache.spark.ml.util.SchemaUtils$.checkColumnType(SchemaUtils.scala:40)
位于org.apache.spark.ml.clustering.KMeansParams$class.validateAndTransferorMschema(KMeans.scala:93)
位于org.apache.spark.ml.clustering.KMeans.validateAndTransferorMschema(KMeans.scala:254)
位于org.apache.spark.ml.clustering.KMeans.transformSchema(KMeans.scala:340)
位于org.apache.spark.ml.PipelineStage.transformSchema(Pipeline.scala:74)
位于org.apache.spark.ml.clustering.KMeans.fit(KMeans.scala:305)
位于ml.dataframe.clustering.SPKMeans.main(SPKMeans.java:32)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
如何在java中使用spark
DataFrame
读取文本文件?如果没有列名和标签列,我们是否应该创建一个?根据您的输入数据
您希望将文本文件加载到spark中,因为带有分隔符的CSV文件是一个空格。
您还可以使用选项header
如下面的示例代码所示
val conf = new SparkConf().setAppName("learning").setMaster("local[2]")
val session = SparkSession.builder().config(conf).getOrCreate()
val schema = DataTypes.createStructType(Array(
DataTypes.createStructField("f1",DataTypes.DoubleType,false),
DataTypes.createStructField("f2",DataTypes.DoubleType,false),
DataTypes.createStructField("f3",DataTypes.DoubleType,false)
))
val df = session.read
.format("csv")
.option("header", false)
.option("delimiter", " ")
.schema(schema)
.load("file:/d:/data/kmeans_data.txt")
我知道该文件可以转换为csv文件。我想知道的是,我是否可以使用
DataFrame
读取无头文本文件?@DuFei是的。你可以。这就是我的答案。
val conf = new SparkConf().setAppName("learning").setMaster("local[2]")
val session = SparkSession.builder().config(conf).getOrCreate()
val schema = DataTypes.createStructType(Array(
DataTypes.createStructField("f1",DataTypes.DoubleType,false),
DataTypes.createStructField("f2",DataTypes.DoubleType,false),
DataTypes.createStructField("f3",DataTypes.DoubleType,false)
))
val df = session.read
.format("csv")
.option("header", false)
.option("delimiter", " ")
.schema(schema)
.load("file:/d:/data/kmeans_data.txt")