小编Ada*_*m H的帖子

变量作为数据框中的列名

有没有办法使用存储在变量中的字符串作为新数据框中的列名?预期结果应该是:

col.name <- 'col1'
df <- data.frame(col.name=1:4)
print(df)

# Real output
  col.name
1        1
2        2
3        3
4        4

# Expected output
  col1
1    1
2    2
3    3
4    4
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建数据框,然后使用names()重命名列或使用df [,col.name]作为现有对象,但我想知道是否有任何其他解决方案可以在使用过程中使用创建数据框架.

r

21
推荐指数
2
解决办法
3万
查看次数

如何在带有 Spark 的 Scala 中使用 countDistinct?

根据DataBrick 的博客,我尝试使用应该在 Spark 1.5 中可用的countDistinct函数。但是,我得到以下异常:

Exception in thread "main" org.apache.spark.sql.AnalysisException: undefined function countDistinct;
Run Code Online (Sandbox Code Playgroud)

我发现在Spark 开发人员的邮件列表中,他们建议使用countdistinct函数来获得应由countDistinct生成的相同结果:

count(distinct <columnName>)
// Instead
countDistinct(<columnName>)
Run Code Online (Sandbox Code Playgroud)

因为我从聚合函数的名称列表中动态构建聚合表达式,所以我希望没有任何需要不同处理的特殊情况。

那么,是否可以通过以下方式统一它:

  • 注册新的 UDAF,它将是count(distinct columnName)的别名
  • 手动注册已经在 Spark CountDistinct 函数中实现,这可能是以下导入中的一个:

    导入 org.apache.spark.sql.catalyst.expressions.{CountDistinctFunction, CountDistinct}

  • 或以任何其他方式做到这一点?

编辑:示例(删除了一些本地引用和不必要的代码):

import org.apache.spark.SparkContext
import org.apache.spark.sql.{Column, SQLContext, DataFrame}
import org.apache.spark.sql.functions._

import scala.collection.mutable.ListBuffer


class Flattener(sc: SparkContext) {
  val sqlContext = new SQLContext(sc)

  def flatTable(data: DataFrame, groupField: String): DataFrame = {
    val flatteningExpressions = data.columns.zip(TypeRecognizer.getTypes(data)).
      flatMap(x …
Run Code Online (Sandbox Code Playgroud)

scala user-defined-functions apache-spark-sql

5
推荐指数
1
解决办法
2万
查看次数

Scala - tuple3 - 句法糖

以下语法的语法糖等价物是什么:

List[Tuple2[String, Int]]  // Base
List[String Tuple2 Int]  // Syntactic sugar
Run Code Online (Sandbox Code Playgroud)

对于Tuple3?例如:

List[Tuple3[String, Float, Int]]  // Base
Run Code Online (Sandbox Code Playgroud)

scala tuples

4
推荐指数
1
解决办法
3070
查看次数