我需要在DataFrame上定义自定义方法.有什么更好的方法呢?解决方案应该是可扩展的,因为我打算定义大量的自定义方法.
我当前的方法是MyClass使用DataFrameas参数创建一个类(比如说),在其中定义我的自定义方法(比如说customMethod)并定义一个转换DataFrame为的隐式方法MyClass.
implicit def dataFrametoMyClass(df: DataFrame): MyClass = new MyClass(df)
Run Code Online (Sandbox Code Playgroud)
因此,我可以打电话:
dataFrame.customMethod()
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?公开征求意见.
为什么以下结果会出错?
scala> import sqlContext.implicits._
import sqlContext.implicits._
scala> val rdd = sc.parallelize(1 to 10).map(x => (Map(x -> 0), 0))
rdd: org.apache.spark.rdd.RDD[(scala.collection.immutable.Map[Int,Int], Int)] = MapPartitionsRDD[20] at map at <console>:27
scala> rdd.toDF
res8: org.apache.spark.sql.DataFrame = [_1: map<int,int>, _2: int]
scala> val rdd = sc.parallelize(1 to 10).map(x => Map(x -> 0))
rdd: org.apache.spark.rdd.RDD[scala.collection.immutable.Map[Int,Int]] = MapPartitionsRDD[23] at map at <console>:27
scala> rdd.toDF
<console>:30: error: value toDF is not a member of org.apache.spark.rdd.RDD[scala.collection.immutable.Map[Int,Int]]
rdd.toDF
Run Code Online (Sandbox Code Playgroud)
那么到底发生了什么,toDF可以将RDD类型转换(scala.collection.immutable.Map[Int,Int], Int)为DataFrame而不是类型scala.collection.immutable.Map[Int,Int].这是为什么?
我有三个整数A,B(小于10 ^ 12)和C(小于10 ^ 15).我想计算(A*B)%C.我知道
(A * B) % C = ((A % C) * (B % C)) % C
Run Code Online (Sandbox Code Playgroud)
但是如果A = B = 10 ^ 11,那么上面的表达式将导致整数溢出.对于上述情况是否有任何简单的解决方案,或者我必须使用快速乘法算法.
如果我必须使用快速乘法算法,那么我应该使用哪种算法.
编辑:我在C++中尝试过上述问题(不会导致溢出,不确定原因),但答案应该是零吗?
提前致谢.
我正在通过扩展Transformer来编写一个自定义的spark.ml变换器.
一切都很好,但是我无法保存这个变换器的这个实例,因为它DefaultParamsWritable不像所有变换器那样从特性延伸,而且我不能直接混合DefaultParamsWritable特性,因为它是特定于包的org.apache.spark.ml.
一个解决方法是将你的课程置于其中org.apache.spark.ml.这是实现这一目标的唯一途径吗?更好的解决方案?
我正在用 c++ 编写一个 impala udf,当提供 yyyyMMdd 中的日期时,它会获取一年中的第几周。但似乎无法找到将 yyyyMMdd 转换为 C++ 中的一周的方法。在java中我可以日历,但是如何在c++中进行它。
TIA