Spark SQL:从星期数和年份中获取月份

Nareshbabral

我有一个带有“周”和“年”列的数据框,需要计算以下月份的月份:

输入:

+----+----+
|Week|Year|
+----+----+
|  50|2012|
|  50|2012|
|  50|2012|

预期产量:

+----+----+-----+
|Week|Year|Month|
+----+----+-----+
|  50|2012|12   |
|  50|2012|12   |
|  50|2012|12   |

任何帮助,将不胜感激。谢谢

以利亚

感谢@ zero323,他向我指出了sqlContext.sql查询,我将查询转换为以下内容:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.apache.spark.sql.functions.*;

public class MonthFromWeekSparkSQL {

    public static void main(String[] args) {

        SparkConf conf = new SparkConf().setAppName("MonthFromWeekSparkSQL").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);

        List myList = Arrays.asList(RowFactory.create(50, 2012), RowFactory.create(50, 2012), RowFactory.create(50, 2012));
        JavaRDD myRDD = sc.parallelize(myList);

        List<StructField> structFields = new ArrayList<StructField>();

        // Create StructFields
        StructField structField1 = DataTypes.createStructField("week", DataTypes.IntegerType, true);
        StructField structField2 = DataTypes.createStructField("year", DataTypes.IntegerType, true);

        // Add StructFields into list
        structFields.add(structField1);
        structFields.add(structField2);

        // Create StructType from StructFields. This will be used to create DataFrame
        StructType schema = DataTypes.createStructType(structFields);

        DataFrame df = sqlContext.createDataFrame(myRDD, schema);
        DataFrame df2 = df.withColumn("yearAndWeek", concat(col("year"), lit(" "), col("week")))
                .withColumn("month", month(unix_timestamp(col("yearAndWeek"), "yyyy w").cast(("timestamp")))).drop("yearAndWeek");

        df2.show();

    }

}

您实际上创建了一个新的年份和星期格式为“ yyyy w”的列,然后使用unix_timestamp对其进行转换,您可以从中拉出您所看到的月份。

PS:似乎在spark 1.5中投放行为不正确-https: //issues.apache.org/jira/browse/SPARK-11724

因此,在这种情况下,更一般的做法是 .cast("double").cast("timestamp")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在SQL中查找星期数

如何在Java中获取连续的星期数和年份?

js按星期数和年份获取一周的第一天

从日期获取年份中的星期数

在php中获取给定月份和年份的按周分隔的日期数组

Python-从星期几,年份和星期数获取日期

如何在R中从日期获取星期数和年份

通过星期数获取一年中的月份数

从星期几,年份和星期数获取日期

如何根据Moment.js中的星期数和年份获取星期的第一天?

SQL:从星期码和年份获取月份名称

获取具有给定月份和年份的星期数和工作日的日期

如何在SQL Server中获取“完成年份”的星期数,开始日期和结束日期?

如何使用Spark Scala获取年份计数

计算月份中的月份,月份,年份,星期几和星期几

如何从星期数,天数和年份中获取日期?

如何获取给定年份和月份的PHP中的星期日期

如果在PHP中同时具有年份和星期#(ISO-8601的星期数),如何获取日期?

从SQL获取年份和月份

在JavaScript中获取今天,X个星期和X个星期之前的星期数

SQL Server:获取年份和月份

Spark Streaming + Spark SQL

从一年的星期数中获取月份的星期数

查找特定月份和年份中星期的日期范围

通过PHP中月份的星期数获取月份的开始和结束日期

如何从Android中选定的日期月份和年份中获取星期几名称?

如何从列表中获取月份和年份

如何从SQL中的日期获取月份和年份

如何獲取星期幾,月份中的日期,月份和年份?