Veri çerçevemi seçili sütunları kullanarak stringtype öğesinden priderred türüne ve prerred order'a dökerek sıralamak istiyorum. Ancak bir sütunun basit bir dökümü bile bu istisnayı ve işe yaramaz. Örnek kod burada sağladım.Scala + Spark + Dataframe Exception Bir sütunu dinamik olarak yayınlamaya ve sıralama sırasını atamaya çalıştığımda
val conf = new SparkConf().setAppName("Sparkify").setMaster("local[*]")
val sparkContext =new SparkContext(conf)
val sqlContext = new SQLContext(sparkContext)
var df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.load("example-data.csv")
// val colsToSort= List("age")
df = df.sort(df.col("age").cast(IntegerType).desc)
df.show()
sparkContext.stop()
basit csv bu
+-----+---+---+
| name|sex|age|
+-----+---+---+
|Alice| f| 34|
| Bob| m| 63|
|Alice| f| 14|
| Bob| m| 6|
+-----+---+---+
ayrıntılı durum yığın gibi görünüyor.
Exception in thread "main" org.apache.spark.sql.catalyst.analysis.UnresolvedException: Invalid call to dataType on unresolved object, tree: unresolvedalias(cast(cast(age#2 as decimal(20,0)) as int))
at org.apache.spark.sql.catalyst.analysis.UnresolvedAlias.dataType(unresolved.scala:295)
at org.apache.spark.sql.catalyst.expressions.SortOrder.dataType(SortOrder.scala:49)
at org.apache.spark.sql.catalyst.expressions.SortOrder.checkInputDataTypes(SortOrder.scala:42)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:62)
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)
at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:318)
at org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpressionUp$1(QueryPlan.scala:107)
at org.apache.spark.sql.catalyst.plans.QueryPlan.org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$2(QueryPlan.scala:117)
at org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$2$1.apply(QueryPlan.scala:121)
Neyi yanlış yapıyorum? Ya da tip dökümü ve siparişi ile birden çok sütuna dayalı bir sıralama ifadesini dinamik olarak bildirmenin en iyi yolu nedir?
Bu konuda bana yardımcı olabilecek herhangi biri var mı?
i ilk yaklaşım kullanıyorum eğer diyelim, ben sütun adı yerine dize tutan bir değişken dize için bunu yine de var mı? Örtük değişken ile çalışmadığı gibi, "var colName =" age " df.withColumn (colName, df.col (colName) .cast (IntegerType)). Sort (df.col (colName) .desc) '. lütfen bana bunda yardım eder misin? – NehaM
Bu benim için mükemmel çalışıyor: 'val colName =" age "; df.withColumn (colName, df.col (colName) .cast (IntegerType)) ' –
Bekleyin,' sort' ile hata oluştu. Bunu deneyin: val valName = "age"; df.withColumn (colName, df.col (colName) .cast (IntegerType)). sort (col (colName) .desc) '- Not' df.col (colName) ',' col (colName) '. –