2016-03-14 19 views
9

Cố gắng thả một cột trong DataFrame, nhưng tôi có tên cột có dấu chấm trong chúng, mà tôi đã thoát.Spark 1.6: thả cột trong DataFrame với các tên cột đã thoát

Trước khi tôi trốn thoát, giản đồ của tôi trông như thế này:

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) 

Nếu tôi cố gắng thả một cột, tôi nhận được:

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) 

Lưu ý rằng tôi thậm chí không cố gắng để thả trên các cột có dấu chấm trong tên. Kể từ khi tôi có thể dường như không làm được gì nhiều mà không thoát các tên cột, tôi chuyển đổi schema để:

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) 

nhưng điều đó dường như không giúp đỡ. Tôi vẫn gặp lỗi tương tự.

Tôi đã thử thoát tất cả các tên cột và thả bằng tên đã thoát, nhưng điều đó cũng không hoạt động.

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ó cách nào khác để thả cột không bị lỗi trên loại dữ liệu này không?

Trả lời

15

Alright, tôi dường như đã tìm thấy các giải pháp sau khi tất cả:

df.drop(df.col("raw.hourOfWeek")) dường như làm việc

+0

câu trả lời hữu ích. Nhưng tôi có một câu hỏi tương tự. Giả sử rằng tôi có khoảng 100 cột trong một khung dữ liệu Spark. Có cách nào để chọn chỉ vài cột từ khung dữ liệu này và tạo một khung dữ liệu khác với các cột đã chọn không? một cái gì đó như df2 = df1.select (df.col ("col1", "col2")) – JKC

+0

tôi nghĩ rằng https://stackoverflow.com/questions/36131716/scala-spark-dataframe-dataframe-select-multiple-columns này -given-a-sequence-of-co trả lời câu hỏi của bạn – MrE

0
val data = df.drop("Customers"); 

sẽ làm việc tốt cho cột bình thường

val new = df.drop(df.col("old.column")); 
+0

điểm dành cho các cột có dấu chấm trong tên. – MrE

+0

Cảm ơn bạn đã chỉ ra @MrE –

Các vấn đề liên quan