如何在Scala中以分数映射的形式获得不同的值?

2024-10-04 03:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对Scala中的数据帧进行分层抽样。我的数据帧只有一列,我想为它形成一个分数映射。我可以在pyspark中完成,但它在Scala中给了我错误。以下是我在Scala中尝试的:

import org.apache.spark.sql.functions.{lit}
val fractions = pqdf.select("vin").distinct().withColumn("fraction", lit(0.001)).rdd.collect().toMap

它错误地说:

Error:(25, 100) Cannot prove that org.apache.spark.sql.Row <:< (T, U). val fractions = pqdf.select("vin").distinct().withColumn("fraction", lit(0.001)).rdd.collect().toMap

我怎么解决它?我想使用上面在.samplyBy方法中创建的分数映射作为参数之一

val sampled_df = pqdf.stat.sampleBy("vin", fractions, 10L)

这是我在pyspark中尝试的方法,它有效:

^{pr2}$

我不确定如何在Scala中实现同样的目标。在


Tags: 数据orgsqlapache错误valselect分数
1条回答
网友
1楼 · 发布于 2024-10-04 03:26:56

它给您一个错误,因为DataFrame.rdd返回{}。要使其工作,您需要可转换为Map的内容,例如(如果您想要Map[String, Double]):

df.select("VIN").distinct()
  .select($"VIN".cast("string"))
  .withColumn("fraction", lit(0.001))
  .as[(String, Double)]
  .rdd
  .collectAsMap()

或者

^{pr2}$

相关问题 更多 >