问题标签 [apache-spark-2.2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spark 无法读取阿拉伯字符并将其替换为“?” 在阅读
当我尝试从包含阿拉伯字符的数据库中读取数据时,它们被替换为“?”我使用的是 java spark 2.2 版本。尝试了一些东西,比如使用 UTF-8 编码,但没有任何效果。
scala - Spark 将变量值序列化为 null 而不是其实际值
我对 Spark 对运行它的节点的代码分配机制的理解只是粗略的,mapPartitions
当我希望为每个分区实例化一个带有参数的类时,我无法让我的代码在 Spark 的 API 中成功运行。
下面的代码运行良好,直到我将类演变MyWorkerClass
为需要一个参数:
直到我不得不(或选择)向我的 class 添加一个构造函数参数时,上面的代码运行得非常好MyWorkerClass
。传递的参数值null
在 worker 中的结果是一样的,而不是 的实际值bar
。不知何故,参数的序列化无法按预期工作。
你会怎么做?
其他想法/评论
我将避免添加庞大的代码CloseableIteratorForSparkMapPartitions
——它只是提供了一个对 Spark 友好的迭代器,甚至可能不是其中最优雅的实现。
据我了解,构造函数参数未正确传递给 Spark 工作人员,因为 Spark 在序列化内容以发送以在 Spark 工作人员上执行时如何捕获状态。但是,实例化该类确实可以无缝地使该类中包含重负载资产——通常可用于我上面代码的最后一行提供的函数;并且该类似乎确实按分区实例化。这实际上是使用mapPartitions
而不是map
.
这是将参数传递给它的实例化,我无法弄清楚如何启用或解决问题。在我的例子中,这个参数是一个只有在程序开始运行后才知道的值(即使在我的工作的单次执行过程中始终保持不变;它实际上是一个程序参数)。我确实需要它来进行类的初始化。
我尝试通过提供一个使用其输入参数实例化的函数来解决问题MyWorkerClass
,而不是像上面那样直接实例化,但这并没有解决问题。
问题的根本症状不是任何异常,而只是实例化bar
时的值MyWorkerClass
只是,而不是在包含我上面包含的代码片段的代码范围内已知null
的实际值!bar
* 一个相关的旧 Spark 问题讨论在这里
apache-spark - 如何在 Spark2 中将 Struct 类型的 Map 转换为 Json
我在数据集中有一个地图字段,其架构如下
需要将其转换为 JSON 类型。请建议如何做。提前致谢
scala - 如何在 Scala 中测试 Spark 应用程序
我有一个 Spark 应用程序,它从文件作为 RDD 接收数据并将其发送到另一个服务(MyService)。处理方案如下所示:
MyService 看起来像这样:
在我的单元测试中,我尝试做这样的事情:
但是当 Spark 将数据从驱动程序传递给执行程序时,它会被序列化,实际上,它是新的 MyServiceMock 对象。我得到了通缉但没有被调用,实际上,与这个模拟的交互为零。
有没有专门的工具来测试这个案例?
scala - 在 Spark DataFrame 的多个列上应用转换的优化方法
在我的 spark 工作中,我必须对 2 个用例的多列进行转换:
- 铸柱
在我的个人用例中,我在 150 列的 Df 上使用它
- 转型
在我的个人用例中,我使用它来执行计算 n 多列以创建 n 新列(1 个输入列用于 1 个输出列,n 次)
如您所见,我使用 FoldLeft 方法和 withColumn。但是我最近在文档中发现,多次使用withColumn并不是那么好:
此方法在内部引入了投影。因此,多次调用它,例如,通过循环以添加多个列可能会生成大计划,这可能会导致性能问题甚至 StackOverflowException。为避免这种情况,请同时对多列使用 select。
我还发现foldleft减速会激发应用程序,因为每次迭代都会执行完整的计划分析。我认为这是真的,因为我在代码中添加了 foldleft,我的 spark 开始工作需要比以前更多的时间。
在多列上应用转换时有好的做法吗?
Spark 版本:2.2 语言:Scala