我在scala应用程序中使用Spark2.3。我有一个从spark sql创建的dataframe,在我共享的示例代码中名为sqlDF。我有一个字符串列表,其中包含以下项
column1 | column2 | column3
1 |1 |1
2 |-5 |1
6 |-6 |1
-7 |-8 |-7
column1 | column2 | column3
1 |1 |1
2 |-5 |1
6 |0 |1
0 |0 |0
为此,我在下面对SQLDF中的所有列(超过500列)进行查询。
sqlDF = sqlDF.withColumn(currColumnName, when(col(currColumnName).isin(stringList:_*), 0).otherwise(col(currColumnName)))
但是得到下面的错误,顺便说一下,如果我只选择一列进行迭代,它可以工作,但是如果我运行上面的代码进行500列迭代,它就失败了
线程“streaming-job-executor-0”java.lang.stackOverflowError在scala.collection.generic.gentraversableFactory$GenericCanBuildFrom.apply(gentraversableFactory.scala:57)在scala.collection.generic.gentraversableFactory$GenericCanBuildFrom.apply(gentraversableFactory.scala:52)在scala.collection.traversableFactory$class.builder$1(traversableLike.scala:229)在scala.collection.traversableLike$class.builder在org.apache.spark.sql.catalyst.trees.treenode$$Anonfun$4.在org.apache.spark.sql.catalyst.trees.treenode.MapProductIterator(Treenode.scala:187)申请(Treenode.scala:333)
我缺少的是什么?
这里有一种不同的方法,在columnx
和X
之间应用left antijoin
,其中X是传输到DataFrame中的项列表。左反联接将返回x
中不存在的所有项,结果我们通过一个外部联接将它们连接在一起(为了更好的性能,可以用左联接代替外部联接,但这将根据用monotonically_recreasing_id分配的id排除所有为零的记录,即id==3):
import org.apache.spark.sql.functions.{monotonically_increasing_id, col}
val df = Seq(
(1, 1, 1),
(2, -5, 1),
(6, -6, 1),
(-7, -8, -7))
.toDF("c1", "c2", "c3")
.withColumn("id", monotonically_increasing_id())
val exdf = Seq(-9, -8, -7, -6).toDF("x")
df.columns.map{ c =>
df.select("id", c).join(exdf, col(c) === $"x", "left_anti")
}
.reduce((df1, df2) => df1.join(df2, Seq("id"), "outer"))
.na.fill(0)
.show
产出:
+---+---+---+---+
| id| c1| c2| c3|
+---+---+---+---+
| 0| 1| 1| 1|
| 1| 2| -5| 1|
| 3| 0| 0| 0|
| 2| 6| 0| 1|
+---+---+---+---+
我有一个类(我不能修改),它只有一个构造函数,它接受一个参数,如下所示: 由于构造函数可以抛出错误,我想实现错误处理。我的第一次尝试是: 但是,现在在块的范围内,不能在其他地方使用。如果我理解正确,我不能在没有初始化的情况下声明对象,因此我可以在块之外声明。那么,我该如何捕捉构造函数抛出的错误呢? 编辑:为了澄清,这是在我的中,在中我将中止程序。此外,参数是一个将被打开的文件,因此没有已知的安全输
在Javascript中的异步生成器函数中,第一个参数本身就是一个异步生成器函数,该函数用于转换函数。在函数中有一个转换和一个检查。如果检查不正确,应中止发电机功能。如果检查正确,则应得出结果。我用随机数模拟了误差。 我找到了三种抛出错误的方法: 返回Promise.reject(新的错误(一些消息); 抛出新的错误(一些消息。); 产生Promise.reject(新的错误(一些消息); 所有的
问题内容: 我是Java的新手。我正在编写一个类,其中构造函数必须检查price参数并确保它不是负数。如果它是负数,则必须将价格设置为零。我检查价格时收到stackoverflow错误。我可以为我做错的事寻求帮助吗? 问题答案: 您的方法将自行调用而不是进行检查。在这种情况下,这导致无限递归。
这是我的代码: 以下是我的任务要求: 一个参数化构造函数,将接收endpoint(作为点)、方向(作为int)和样式(作为字符串)。如果接收到的点或字符串为空,则抛出新的IllegalArgumentException( 我知道我检查样式是虚线、虚线还是双精度的部分出了问题,因为当我把它注释出来时,除了那个部分,所有的东西都工作了。就现在的情况而言,它只是在所有事情上抛出了非法的辩论例外。 我有一
问题内容: 现在,使用Swift时,某些函数都标有,这迫使开发人员在块内调用该函数。但是开发人员如何才能知道该函数抛出的不同异常列表? 作为参考,这是一行Java代码: 很明显,例外是2 ,开发人员可以根据错误决定采取不同的操作。 我们可以在Swift上实现相同的目标吗? 问题答案: 当Swift文档说一个函数时,它们意味着它抛出一个(在Cocoa API中通常为),而不是异常。 考虑以下流量的:
我试图在配置单元中执行select*from db.abc操作,此配置单元表是使用spark加载的 “它不工作”显示错误: 错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId超出范围:-1(状态=,代码=0) 我需要在spark-submit或shell中添加任何属性吗?或者使用spark读取此hiv e表的另一种方