当我试图为我们的一个复杂问题创建一个UDAF时,我决定从一个基本的UDAF开始,该UDAF按原样返回列。既然我是刚开始使用SQL/Scala的,有人能帮我指出我的错误吗。
代码如下:
导入org.apache.spark.sql.expressions.mutableaggregationbuffer导入org.apache.spark.sql.expressions.userdefinedaggregatefunction导入org.apache.spark.sql.row导入org.apache.spark.sql.types._导入org.apache.spark.sql.types.dataTypes
导入Scala.Collection._
重写def bufferSchema:StructType=StructType(StructField(“shingles”,(StringType))::Nil)
重写def DataType:DataType=(StringType)
重写def deterministic:Boolean=true
重写def merge(buffer1:MutableAggregationBuffer,buffer2:Row):Unit={}
重写def evaluate(buffer:Row):Any={buffer(0)}}
运行上述UDAF的代码如下:
import spark.implicits._;
val df = spark.read.json("people.json")
df.createOrReplaceTempView("people")
val sqlDF = spark.sql("Select name from people")
sqlDF.show()
val minhash = df.select(MinhashUdaf(col("name")).as("minhash"))
minhash.printSchema()
minhash.show(truncate = false)
由于在UDAF中我是按原样返回输入,所以我应该按原样获取每一行的列“name”的值。而在运行上面的字符串时,返回的是一个空字符串。
您没有实现合并函数。
使用下面的代码,可以根据需要打印列的值。
object MinhashUdaf extends UserDefinedAggregateFunction {
override def inputSchema: org.apache.spark.sql.types.StructType = StructType(StructField("value", StringType) :: Nil)
override def bufferSchema: StructType = StructType( StructField("shingles", (StringType)) :: Nil)
override def dataType: DataType = (StringType)
override def deterministic: Boolean = true
override def initialize(buffer: MutableAggregationBuffer): Unit = { buffer(0) = ("") }
override def update(buffer: MutableAggregationBuffer, input: Row): Unit = { buffer.update(0, input.get(0)) }
override def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit = { buffer1.update(0, buffer2.get(0))}
override def evaluate(buffer: Row): Any = { buffer(0) } }
我尝试使用graph api v2.0获取我的组,但数据返回为空: 在此之前,我使用v1.0,这是可行的。我使用:
问题内容: 我犹豫要问这个问题,因为它看起来很奇怪。但不管怎么说。以防万一有人已经遇到了相同的问题…文件系统功能(fopem,file,file_get_contents)对于http://包装器表现得很奇怪 它似乎有效。 没有提出错误 。fopen()返回资源。 它不会为所有肯定有效的网址返回任何数据(例如)。 文件返回空数组,file_get_contents()返回空字符串,fread返回f
<code>Spark</code>版本为1.3.0。 来自< code > sqlcontext . Scala (https://github . com/Apache/spark/blob/master/SQL/core/src/main/Scala/org/Apache/spark/SQL/sqlcontext . Scala)的源代码: 我真的不能理解上面的代码。 是如何工作的? (_)
我完全被Protobuf的问题困住了 给定以下代码: 这将计算为true并退出应用程序。什么可能使protobuf在MessageName上返回空字符串?我可以看到,这些类型及其名称在生成的protobuf消息代码中进行了应有的注册: 我还验证了上面的init实际运行,它确实运行。 我有其他生成的原始消息,它们会按预期返回它们的名称。那么这里出了什么问题? 编辑原型文件如下所示 再次编辑。手动调用
我正在尝试分解一个字符串(从技术上讲,是从数据帧中的列传递的字符串),并将这些损坏的字符串作为列表返回到数据帧。斯卡拉版本 2.11。我更喜欢带有udf的斯卡拉或pyspark解决方案 - 因为udf内部发生了很多事情。 假设我有一个数据框架: 我想要的结果(在udf中,因为那里发生了很多事情;斯卡拉版本 2.11) -- 编写一个udf来打破这个并返回列表-但是,我不知道如何定义或传递模式以将结
我遇到过一个奇怪的情况,在MSFT Azure短语断路器处理完一段文本后,有一段代码被设计用来剔除空白字符串、句点破折号等。我需要帮助找出如何调试这个问题。 当给定值时,以下代码块返回。显然,期望方法在第一个语句之后返回。在要看的899个短语中,似乎只有两个有这个问题。在另一台机器上也会发生。 下面是调试器的快照。 这可能是Visual Studio或.NET中的bug吗?我试着使用各种可视化器,