[英]Spark 1.6 apply function to column with dot in name/ How to properly escape colName
[英]Column name with dot spark
我正在嘗試從DataFrame
獲取列並將其轉換為RDD[Vector]
。
問題是我有名稱中帶有“點”的列作為以下數據集:
"col0.1","col1.2","col2.3","col3.4"
1,2,3,4
10,12,15,3
1,12,10,5
這就是我正在做的:
val df = spark.read.format("csv").options(Map("header" -> "true", "inferSchema" -> "true")).load("C:/Users/mhattabi/Desktop/donnee/test.txt")
val column=df.columns.map(c=>s"`${c}`")
val rows = new VectorAssembler().setInputCols(column).setOutputCol("vs")
.transform(df)
.select("vs")
.rdd
val data =rows.map(_.getAs[org.apache.spark.ml.linalg.Vector](0))
.map(org.apache.spark.mllib.linalg.Vectors.fromML)
val mat: RowMatrix = new RowMatrix(data)
//// Compute the top 5 singular values and corresponding singular vectors.
val svd: SingularValueDecomposition[RowMatrix, Matrix] = mat.computeSVD(mat.numCols().toInt, computeU = true)
val U: RowMatrix = svd.U // The U factor is a RowMatrix.
val s: Vector = svd.s // The singular values are stored in a local dense vector.
val V: Matrix = svd.V // The V factor is a local dense matrix.
println(V)
請幫助我考慮名稱中帶有點的列。謝謝
如果您的問題是列名中的.(dot)
,您可以使用`(backticks)
將列名括起來。
df.select("`col0.1`")
這里的問題是VectorAssembler
實現,而不是列本身。 例如,您可以跳過標題:
val df = spark.read.format("csv")
.options(Map("inferSchema" -> "true", "comment" -> "\""))
.load(path)
new VectorAssembler()
.setInputCols(df.columns)
.setOutputCol("vs")
.transform(df)
或在傳遞給VectorAssembler
之前重命名列:
val renamed = df.toDF(df.columns.map(_.replace(".", "_")): _*)
new VectorAssembler()
.setInputCols(renamed.columns)
.setOutputCol("vs")
.transform(renamed)
最后,最好的方法是明確提供模式:
import org.apache.spark.sql.types._
val schema = StructType((0 until 4).map(i => StructField(s"_$i", DoubleType)))
val dfExplicit = spark.read.format("csv")
.options(Map("header" -> "true"))
.schema(schema)
.load(path)
new VectorAssembler()
.setInputCols(dfExplicit.columns)
.setOutputCol("vs")
.transform(dfExplicit)
對於 Spark SQL
spark.sql("select * from reg_data where reg_data.`createdResource.type` = 'Berlin'")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.