Tentativo di eliminare una colonna in un DataFrame, ma ho nomi di colonna con punti in essi, che sono sfuggito.Spark 1.6: colonna di trascinamento in DataFrame con nomi di colonne con caratteri escape
Prima di fuggire, il mio schema è simile al seguente:
root
|-- user_id: long (nullable = true)
|-- hourOfWeek: string (nullable = true)
|-- observed: string (nullable = true)
|-- raw.hourOfDay: long (nullable = true)
|-- raw.minOfDay: long (nullable = true)
|-- raw.dayOfWeek: long (nullable = true)
|-- raw.sensor2: long (nullable = true)
Se provo ad eliminare una colonna, ottengo:
df = df.drop("hourOfWeek")
org.apache.spark.sql.AnalysisException: cannot resolve 'raw.hourOfDay' given input columns raw.dayOfWeek, raw.sensor2, observed, raw.hourOfDay, hourOfWeek, raw.minOfDay, user_id;
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:60)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:57)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:319)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:319)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:53)
Si noti che non sto nemmeno cercando di cadere sul le colonne con punti nel nome. Dal momento che non riuscivo a fare molto senza sfuggire i nomi di colonna, ho convertito lo schema per:
root
|-- user_id: long (nullable = true)
|-- hourOfWeek: string (nullable = true)
|-- observed: string (nullable = true)
|-- `raw.hourOfDay`: long (nullable = true)
|-- `raw.minOfDay`: long (nullable = true)
|-- `raw.dayOfWeek`: long (nullable = true)
|-- `raw.sensor2`: long (nullable = true)
ma che non sembra aiutare. Ho ancora lo stesso errore.
Ho tentato di sfuggire a tutti i nomi di colonna e di eliminare utilizzando il nome di escape, ma non funziona neanche.
root
|-- `user_id`: long (nullable = true)
|-- `hourOfWeek`: string (nullable = true)
|-- `observed`: string (nullable = true)
|-- `raw.hourOfDay`: long (nullable = true)
|-- `raw.minOfDay`: long (nullable = true)
|-- `raw.dayOfWeek`: long (nullable = true)
|-- `raw.sensor2`: long (nullable = true)
df.drop("`hourOfWeek`")
org.apache.spark.sql.AnalysisException: cannot resolve 'user_id' given input columns `user_id`, `raw.dayOfWeek`, `observed`, `raw.minOfDay`, `raw.hourOfDay`, `raw.sensor2`, `hourOfWeek`;
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:60)
C'è un altro modo per rilasciare una colonna che non fallirebbe su questo tipo di dati?
risposta utile. Ma ho un'altra domanda simile. Supponiamo di avere circa 100 colonne in Spark Dataframe. C'è un modo per selezionare solo poche colonne da questo dataframe e creare un altro dataframe con quelle colonne selezionate? qualcosa come df2 = df1.select (df.col ("col1", "col2")) – JKC
penso questo https://stackoverflow.com/questions/36131716/scala-spark-dataframe-dataframe-select-multiple-columns -given-a-sequence-of-co risponde alla tua domanda – MrE