问题标签 [apache-spark-1.5]

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.

0 投票
1 回答
162 浏览

scala - [Spark SQL]:给定两个 DataFrame 并创建一个新 DataFrame 的查找功能

我正在使用带有 Spark 1.5 的 Scala。

给定两个 DataFrameDataFrame1DataFrame2,我想在其中搜索DataFrame2键的值DataFrame1并使用结果创建DataFrame3。该功能是独一无二的,因为DataFrame1每行中有许多键,并且输出 DataFrame 应该以相同的顺序填充键和值,如下面的输出 DataFrame 所示。如果可能的话,我正在寻找一个分布式解决方案,因为这个功能应该在数百万条记录(约 1000 万条记录)上实现。任何有关如何进行的指导和有关有用方法的信息都有很大帮助。提前致谢!

输入:DataFrame1(contract_id 以及最多关联的 4 个客户) 输入:DataFrame2(客户主查询信息)

输出:DataFrame3

0 投票
0 回答
28 浏览

scala - 在 Spark 1.5 中并行化 Dataframe 写入

我有以下数据框:

我想将输出作为 CSV 写入按年和月分区的文件夹中。例如,上述案例将有 3 个文件夹路径,如下所示:

不幸的是,我必须使用Spark 1.5.0with Scalawhich 没有函数可以根据所需列中的唯一值轻松写入这些分区。

到目前为止,我有以下代码:

这里的问题是,我看到输出写入是按顺序发生的,即它从循环中的第一年开始,完成其中的所有月份,然后跳到下一年,依此类推。这给作业增加了不必要的运行时间,因为我看到写入每个分区需要几乎完全相同的时间,即使数据在分区之间分布不均。

有什么方法可以并行化此代码,以便将 CSV 并行而不是顺序写入这些文件夹?

请注意,我不能使用其他版本的 Spark,除了1.5.0

0 投票
1 回答
224 浏览

scala - 使用 Spark Scala 提取月度数据

我正在尝试从文件中提取数据一个月,然后对其进行处理。基本上我需要为每个月提取数据并进行一些转换。由于我的工作每天都在运行,我想利用它并填充该月的数据,直到 run_date。

我有两种方法:

方法一:

仅填充上个月的数据。例如,如果我的 current_date 或 run_date 在 月May,我将填充 月的数据April。这可以通过从中提取月份current_date()并从中减去1来实现。类似于以下内容:

df.filter(month(to_date(col("startDate")))===month(to_date(current_date())-1))

这只是一个想法。这段代码无法实现我想要做的事情,因为我只是减去月份部分而不考虑Year 部分。

但在这种情况下,我的工作将每天运行以填充整个月的相同数据。这样做没有意义。

方法二:

如果我的 current_date 是2020-05-27,我想从中提取数据2020-05-01 to 2020-05-26。如果我当前的日期是2020-06-01,它应该填充来自 5 月份的数据2020-05-01 to 2020-05-31

我想实施方法 2。我能想到的唯一想法是写几个Case语句来检查日期并相应地填充它。

有人可以分享一些想法。有没有稍微直截了当的方法。

我在用Spark 1.5

0 投票
2 回答
98 浏览

scala - Spark Scala:在使用 spark 按不同日期排序后,需要获取具有 NULL 日期的记录

我有以下数据:

我正在尝试创建 3 个新列,它们基本上说明是否Pid对 env1、env2 和 env3 有效。为此,我首先orderDate按降序对列上的记录进行排序(已在上表中排序)。

  1. 如果对于Env1_date, Env2_date, Env3_date, 最高记录是Null, 它们被认为是有效的。在Null记录之后,如果日期小于特定日期(在此示例中1/9/2020),则认为其有效。任何其他记录都被标记为无效。

  2. 如果顶部记录不是NULL,需要检查日期是否等于1/9/2020。如果是这样,它们也被标记为有效

我的输出应如下所示:

我正在尝试使用Spark 1.5and来实现这一点scala

我尝试使用lag功能。但无法包括所有场景。不知道如何解决这个问题。

有人可以在这里帮助我吗?

spark注意:Windows 函数、toDf()、createDataFrame() 函数在我使用的中不起作用。它是一个自定义的火花环境,几乎没有限制

0 投票
0 回答
46 浏览

scala - 使用 Spark Scala 在满足条件后标记记录

我需要一些关于以下情况的专家意见:

我有以下数据框df1

每个group都是按OrderDate顺序排列的descending。订购后,每个value有都Current_date < (Date1 + 31Days) or Date1 as NULL需要标记为validuntil Current_date > (Date1 + 31Days)。发布后,每个Value都应标记为Invalid不考虑Date1价值。

如果对于 a group,所有的记录都是NULL,所有的Value都应该被标记为Valid

我的输出 df 应该如下所示:

我的做法:

我 在订购后row_number为每个创建。发布我得到每个的信息并将其保存为新的数据框。groupOrderDatemin(row_number)Current_date > (Date1 + 31Days)groupdfMin

然后我加入它 df1dfMin基于grouprow_number(row_number < min(row_number))

这种方法适用于大多数情况。但是当对于 are 的所有group值时,这种方法会失败。Date1NULL

还有其他更好的方法来包含上述场景吗?

注意:我使用的是相当旧的 Spark- 版本Spark 1.5windows功能在我的环境中也不起作用(它是一个自定义框架,并且有很多限制)。对于row_number,我使用zipWithIndex了方法。