小编J *_*ath的帖子

如何转动DataFrame?

我开始使用Spark DataFrames,我需要能够透过数据来创建多列的1列中的多列.在Scalding中有内置的功能,我相信Python中的Pandas,但我找不到任何新的Spark Dataframe.

我假设我可以编写某种类型的自定义函数,但是我甚至不确定如何启动,特别是因为我是Spark的新手.我有人知道如何使用内置功能或如何在Scala中编写内容的建议,非常感谢.

pivot scala dataframe apache-spark apache-spark-sql

52
推荐指数
5
解决办法
4万
查看次数

使用Spark Dataframe中的函数创建新列

我正试图在Spark中找出新的数据帧API.看起来好像是向前迈出了一大步,但却做了一件非常简单的事情.我有一个包含2列的数据框,"ID"和"Amount".作为一个通用示例,假设我想返回一个名为"code"的新列,该列返回基于"Amt"值的代码.我可以写一个像这样的函数:

def coder(myAmt:Integer):String {
  if (myAmt > 100) "Little"
  else "Big"
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它时:

val myDF = sqlContext.parquetFile("hdfs:/to/my/file.parquet")

myDF.withColumn("Code", coder(myDF("Amt")))
Run Code Online (Sandbox Code Playgroud)

我得到类型不匹配错误

found   : org.apache.spark.sql.Column
required: Integer
Run Code Online (Sandbox Code Playgroud)

我已经尝试将我的函数的输入类型更改为org.apache.spark.sql.Column但是我随后在函数编译时开始得到错误,因为它在if语句中需要一个布尔值.

我做错了吗?有没有比使用withColumn更好/另一种方法?

谢谢你的帮助.

scala dataframe apache-spark

36
推荐指数
2
解决办法
6万
查看次数

更改spark数据帧中列的可空属性

我正在为某些测试手动创建数据帧.创建它的代码是:

case class input(id:Long, var1:Int, var2:Int, var3:Double)
val inputDF = sqlCtx
  .createDataFrame(List(input(1110,0,1001,-10.00),
    input(1111,1,1001,10.00),
    input(1111,0,1002,10.00)))
Run Code Online (Sandbox Code Playgroud)

架构看起来像这样:

root
 |-- id: long (nullable = false)
 |-- var1: integer (nullable = false)
 |-- var2: integer (nullable = false)
 |-- var3: double (nullable = false)
Run Code Online (Sandbox Code Playgroud)

我想为这些变量中的每一个制作'nullable = true'.如何从一开始就声明它或在创建新数据帧后将其切换?

scala apache-spark spark-dataframe

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

将数组作为Spark SQL中的UDF参数传递

我试图通过一个以数组作为参数的函数来转换数据帧.我的代码看起来像这样:

def getCategory(categories:Array[String], input:String): String = { 
  categories(input.toInt) 
} 

val myArray = Array("a", "b", "c") 

val myCategories =udf(getCategory _ ) 

val df = sqlContext.parquetFile("myfile.parquet) 

val df1 = df.withColumn("newCategory", myCategories(lit(myArray), col("myInput")) 
Run Code Online (Sandbox Code Playgroud)

但是,lit不喜欢数组和这个脚本错误.我尝试定义一个新的部分应用函数,然后是udf:

val newFunc = getCategory(myArray,  _:String) 
val myCategories = udf(newFunc) 

val df1 = df.withColumn("newCategory", myCategories(col("myInput"))) 
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我得到一个nullPointer异常,并且看起来myArray未被识别.关于如何将数组作为参数传递给具有数据帧的函数的任何想法?

另外,关于为什么做一些简单的事情(比如在数据帧上使用函数)的任何解释都是如此复杂(定义函数,将其重新定义为UDF等等)?

scala user-defined-functions dataframe apache-spark apache-spark-sql

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

查找当前运行的 SparkContext 的名称

我发誓我以前做过这个,但我找不到代码或答案。我想获取当前运行的 SparkContext 的名称并将其读入变量或将其打印到屏幕上。类似的东西:

val myContext = SparkContext.getName
Run Code Online (Sandbox Code Playgroud)

例如,如果我在 spark-shell 中运行它,它将返回“sc”。有谁知道怎么得到吗?

scala apache-spark

6
推荐指数
1
解决办法
4267
查看次数

Scala:Succint检查null/empty值并返回0的方法

我需要在读取数据文件后将一些字符串值转换为Ints.该字段可能为空,这会在尝试进行转换时导致错误.是否有一种简单的方法可以检查null(或者可以转换为整数的适当值),如果无法转换则只返回0?getOrElse似乎是一种可能性,但我不能完全理解写作.我可以写一个可以很容易地完成它的功能,但我希望有一个更优雅/简洁的方法来做到这一点.

scala

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

Scala:创建一个新列表,其中每个元素都是使用不同后缀重复的旧列表的元素

这似乎应该很容易,但我不能把它放在一起.我想获取一个字符串列表并创建一个新列表,其中包含第一个列表中每个元素的两个但具有不同的后缀.所以:

List("a", "b", "c") -> List("a_x", "a_y", "b_x", "b_y", "c_x", "c_y"
Run Code Online (Sandbox Code Playgroud)

我试过了

val list2 = list1.map(i=> i+"_x", i+"_y")
Run Code Online (Sandbox Code Playgroud)

但斯卡拉说我的论点太多了.这很接近:

 val list2 = list1.map(i=> (i+"_x", i+"_y")) 
Run Code Online (Sandbox Code Playgroud)

但它产生了List(("a_x","a_y"),("b_x","b_y"),("c_x","c_y"))这不是我想要的.我敢肯定;我遗漏了一些明显的东西.

scala

2
推荐指数
2
解决办法
389
查看次数

Spark:使用命名参数提交应用程序

是否有可能编写一个Spark脚本,该脚本具有可以通过名称而不是args()数组中的索引引用的参数?我有一个脚本有4个必需的参数,根据这些参数的值,可能需要最多3个额外的参数.例如,在一种情况下,args(5)可能是我需要输入的日期.我是另一个,那个日期可能会因为我需要的另一个论点而最终出现在args(6)中.

烫伤实现了这一点,但我不知道Spark的作用.

scala apache-spark

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

Scala:从函数返回多种数据类型

这有点像理论上的问题,但我可能想做些什么.是否可以从Scala函数返回多个数据数据类型但限制允许的类型?我知道我可以通过指定它来返回一种类型,或者我基本上可以通过不指定返回类型来允许任何数据类型,但我想返回3种特定数据类型中的一种以保留一点类型安全性.有没有办法在返回类型中写'或',如:

def myFunc(input:String): [Int || String] = { ...}
Run Code Online (Sandbox Code Playgroud)

这个主要的上下文是尝试编写通用数据加载脚本.我的一些用户使用Spark,一些Scalding,谁知道接下来会发生什么.我希望我的用户能够使用可能返回RichPipe,RDD或其他一些数据格式的通用加载脚本,具体取决于他们使用的框架,但我不想完全抛弃类型安全性.

scala

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