问题标签 [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.
scala - [Spark SQL]:给定两个 DataFrame 并创建一个新 DataFrame 的查找功能
我正在使用带有 Spark 1.5 的 Scala。
给定两个 DataFrameDataFrame1
和DataFrame2
,我想在其中搜索DataFrame2
键的值DataFrame1
并使用结果创建DataFrame3
。该功能是独一无二的,因为DataFrame1
每行中有许多键,并且输出 DataFrame 应该以相同的顺序填充键和值,如下面的输出 DataFrame 所示。如果可能的话,我正在寻找一个分布式解决方案,因为这个功能应该在数百万条记录(约 1000 万条记录)上实现。任何有关如何进行的指导和有关有用方法的信息都有很大帮助。提前致谢!
输出:DataFrame3
scala - 在 Spark 1.5 中并行化 Dataframe 写入
我有以下数据框:
我想将输出作为 CSV 写入按年和月分区的文件夹中。例如,上述案例将有 3 个文件夹路径,如下所示:
不幸的是,我必须使用Spark 1.5.0
with Scala
which 没有函数可以根据所需列中的唯一值轻松写入这些分区。
到目前为止,我有以下代码:
这里的问题是,我看到输出写入是按顺序发生的,即它从循环中的第一年开始,完成其中的所有月份,然后跳到下一年,依此类推。这给作业增加了不必要的运行时间,因为我看到写入每个分区需要几乎完全相同的时间,即使数据在分区之间分布不均。
有什么方法可以并行化此代码,以便将 CSV 并行而不是顺序写入这些文件夹?
请注意,我不能使用其他版本的 Spark,除了1.5.0
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
scala - Spark Scala:在使用 spark 按不同日期排序后,需要获取具有 NULL 日期的记录
我有以下数据:
我正在尝试创建 3 个新列,它们基本上说明是否Pid
对 env1、env2 和 env3 有效。为此,我首先orderDate
按降序对列上的记录进行排序(已在上表中排序)。
如果对于
Env1_date
,Env2_date
,Env3_date
, 最高记录是Null
, 它们被认为是有效的。在Null
记录之后,如果日期小于特定日期(在此示例中1/9/2020
),则认为其有效。任何其他记录都被标记为无效。如果顶部记录不是
NULL
,需要检查日期是否等于1/9/2020
。如果是这样,它们也被标记为有效
我的输出应如下所示:
我正在尝试使用Spark 1.5
and来实现这一点scala
。
我尝试使用lag
功能。但无法包括所有场景。不知道如何解决这个问题。
有人可以在这里帮助我吗?
spark
注意:Windows 函数、toDf()、createDataFrame() 函数在我使用的中不起作用。它是一个自定义的火花环境,几乎没有限制
scala - 使用 Spark Scala 在满足条件后标记记录
我需要一些关于以下情况的专家意见:
我有以下数据框df1
:
每个group
都是按OrderDate
顺序排列的descending
。订购后,每个value
有都Current_date < (Date1 + 31Days) or Date1 as NULL
需要标记为valid
until Current_date > (Date1 + 31Days)
。发布后,每个Value
都应标记为Invalid
不考虑Date1
价值。
如果对于 a group
,所有的记录都是NULL
,所有的Value
都应该被标记为Valid
我的输出 df 应该如下所示:
我的做法:
我 在订购后row_number
为每个创建。发布我得到每个的信息并将其保存为新的数据框。group
OrderDate
min(row_number)
Current_date > (Date1 + 31Days)
group
dfMin
然后我加入它 df1
并dfMin
基于group
row_number(row_number < min(row_number))
这种方法适用于大多数情况。但是当对于 are 的所有group
值时,这种方法会失败。Date1
NULL
还有其他更好的方法来包含上述场景吗?
注意:我使用的是相当旧的 Spark- 版本Spark 1.5
。windows
功能在我的环境中也不起作用(它是一个自定义框架,并且有很多限制)。对于row_number
,我使用zipWithIndex
了方法。