Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在Spark中分解数据帧的行?_Scala_Apache Spark_Hive_Apache Spark Sql - Fatal编程技术网

Scala 如何在Spark中分解数据帧的行?

Scala 如何在Spark中分解数据帧的行?,scala,apache-spark,hive,apache-spark-sql,Scala,Apache Spark,Hive,Apache Spark Sql,我有一个Spark数据框,其中包含类似以下内容的数据: +----+---------------------+-------+----------+-------------+ | ID | Timestamp | Value | Interval | Consumption | +----+---------------------+-------+----------+-------------+ | 1 | 2012-05-02 12:30:00 | 550 |

我有一个Spark数据框,其中包含类似以下内容的数据:

+----+---------------------+-------+----------+-------------+
| ID |      Timestamp      | Value | Interval | Consumption |
+----+---------------------+-------+----------+-------------+
|  1 | 2012-05-02 12:30:00 |   550 |        1 |           5 |
|  1 | 2012-05-02 12:45:00 |   551 |        1 |           1 |
|  1 | 2012-05-02 13:00:00 |   554 |        1 |           3 |
|  1 | 2012-05-02 14:00:00 |   578 |        4 |          24 |
|  1 | 2012-05-02 14:15:00 |   578 |        1 |           0 |
|  1 | 2012-05-02 14:30:00 |   584 |        1 |           6 |
+----+---------------------+-------+----------+-------------+
+----+---------------------+-------+----------+-------------+------------+
| ID |      Timestamp      | Value | Interval | Consumption | Estimation |
+----+---------------------+-------+----------+-------------+------------+
|  1 | 2012-05-02 12:30:00 |   550 |        1 |           5 | ?          |
|  1 | 2012-05-02 12:45:00 |   551 |        1 |           1 | ?          |
|  1 | 2012-05-02 13:00:00 |   554 |        1 |           3 | ?          |
|  1 | 2012-05-02 13:15:00 |   560 |        1 |           6 | 4          |
|  1 | 2012-05-02 13:30:00 |   566 |        1 |           6 | 4          |
|  1 | 2012-05-02 13:45:00 |   572 |        1 |           6 | 4          |
|  1 | 2012-05-02 14:00:00 |   578 |        1 |           6 | 4          |
|  1 | 2012-05-02 14:15:00 |   578 |        1 |           0 | ?          |
|  1 | 2012-05-02 14:30:00 |   584 |        1 |           6 | ?          |
+----+---------------------+-------+----------+-------------+------------+
我希望将其转化为如下内容:

+----+---------------------+-------+----------+-------------+
| ID |      Timestamp      | Value | Interval | Consumption |
+----+---------------------+-------+----------+-------------+
|  1 | 2012-05-02 12:30:00 |   550 |        1 |           5 |
|  1 | 2012-05-02 12:45:00 |   551 |        1 |           1 |
|  1 | 2012-05-02 13:00:00 |   554 |        1 |           3 |
|  1 | 2012-05-02 14:00:00 |   578 |        4 |          24 |
|  1 | 2012-05-02 14:15:00 |   578 |        1 |           0 |
|  1 | 2012-05-02 14:30:00 |   584 |        1 |           6 |
+----+---------------------+-------+----------+-------------+
+----+---------------------+-------+----------+-------------+------------+
| ID |      Timestamp      | Value | Interval | Consumption | Estimation |
+----+---------------------+-------+----------+-------------+------------+
|  1 | 2012-05-02 12:30:00 |   550 |        1 |           5 | ?          |
|  1 | 2012-05-02 12:45:00 |   551 |        1 |           1 | ?          |
|  1 | 2012-05-02 13:00:00 |   554 |        1 |           3 | ?          |
|  1 | 2012-05-02 13:15:00 |   560 |        1 |           6 | 4          |
|  1 | 2012-05-02 13:30:00 |   566 |        1 |           6 | 4          |
|  1 | 2012-05-02 13:45:00 |   572 |        1 |           6 | 4          |
|  1 | 2012-05-02 14:00:00 |   578 |        1 |           6 | 4          |
|  1 | 2012-05-02 14:15:00 |   578 |        1 |           0 | ?          |
|  1 | 2012-05-02 14:30:00 |   584 |        1 |           6 | ?          |
+----+---------------------+-------+----------+-------------+------------+
更具体地说,我想谈谈:

+----+---------------------+-------+----------+-------------+
| ID |      Timestamp      | Value | Interval | Consumption |
+----+---------------------+-------+----------+-------------+
|  1 | 2012-05-02 14:00:00 |   578 |        4 |          24 |
+----+---------------------+-------+----------+-------------+
为此:

+----+---------------------+-------+----------+-------------+------------+
| ID |      Timestamp      | Value | Interval | Consumption | Estimation |
+----+---------------------+-------+----------+-------------+------------+
|  1 | 2012-05-02 13:15:00 |   560 |        1 |           6 | 4          |
|  1 | 2012-05-02 13:30:00 |   566 |        1 |           6 | 4          |
|  1 | 2012-05-02 13:45:00 |   572 |        1 |           6 | 4          |
|  1 | 2012-05-02 14:00:00 |   578 |        1 |           6 | 4          |
+----+---------------------+-------+----------+-------------+------------+
我希望将间隔超过1的行从原始表中取出,为缺少的间隔插入值,并将新创建的行重新插入原始行的初始表位置。我知道如何实现这一点(例如,在PostgreSQL中,我只需使用generate_series()函数来创建所需的时间戳并计算新的值),但在Spark/Scala中实现这些是很麻烦的

假设我创建了一个新的数据帧,其中只包含间隔大于1的行,那么如何将这些行复制“n”次,而“n”是间隔的值?我相信这足以让我开始使用计数器函数,该函数由我可以创建的行引用分区


如果有一种方法可以复制我错过的generate_series()的行为,那就更好了。

听起来
flatMap
是这项工作的合适工具,请参阅此处的详细信息:非常感谢您的建议,我现在就来看看。谢谢。真有趣——我忘了我已经回答了另一个问题。而且,我忘记了我知道如何通过使用
join
UDF
join
右侧模拟
爆炸
!!(记住对我的答案投赞成票!-)大卫,我一直在阅读文档并寻找例子。似乎大多数
flatMap
df.explode()
LATERAL VIEW
的应用程序都有一个
map
UDF
,具有固定数量的输出。在我的例子中,我想将'Interval'的值
n
转换成一个数组或列表,从
1到n
,并将每个元素连接到相应的行,从而创建每行的
n
副本。这样行吗?我正在努力研究如何实现这一点。听起来
flatMap
是这项工作的合适工具,请参阅此处的详细信息:非常感谢您的建议,我现在就来看看。谢谢。真有趣——我忘了我已经回答了另一个问题。而且,我忘记了我知道如何通过使用
join
UDF
join
右侧模拟
爆炸
!!(记住对我的答案投赞成票!-)大卫,我一直在阅读文档并寻找例子。似乎大多数
flatMap
df.explode()
LATERAL VIEW
的应用程序都有一个
map
UDF
,具有固定数量的输出。在我的例子中,我想将'Interval'的值
n
转换成一个数组或列表,从
1到n
,并将每个元素连接到相应的行,从而创建每行的
n
副本。这样行吗?我正努力想知道如何做到这一点。