java - 向 Spark 数据集添加列并转换数据

标签 java apache-spark dataset

我正在加载 parquet 文件作为 Spark 数据集。我可以从查询中查询并创建新的数据集。现在,我想向数据集添加一个新列(“hashkey”)并生成值(例如 md5sum(nameValue))。我怎样才能实现这个目标?

public static void main(String[] args) {

    SparkConf sparkConf = new SparkConf();

    sparkConf.setAppName("Hello Spark");
    sparkConf.setMaster("local");

    SparkSession spark = SparkSession.builder().appName("Java Spark SQL basic example")
            .config("spark.master", "local").config("spark.sql.warehouse.dir", "file:///C:\\spark_warehouse")
            .getOrCreate();

    Dataset<org.apache.spark.sql.Row> df = spark.read().parquet("meetup.parquet");
    df.show();

    df.createOrReplaceTempView("tmpview");

    Dataset<Row> namesDF = spark.sql("SELECT * FROM tmpview where name like 'Spark-%'");

    namesDF.show();

}

输出如下所示:

+-------------+-----------+-----+---------+--------------------+
|         name|meetup_date|going|organizer|              topics|
+-------------+-----------+-----+---------+--------------------+
|    Spark-H20| 2016-01-01|   50|airisdata|[h2o, repeated sh...|
|   Spark-Avro| 2016-01-02|   60|airisdata|    [avro, usecases]|
|Spark-Parquet| 2016-01-03|   70|airisdata| [parquet, usecases]|
+-------------+-----------+-----+---------+--------------------+

最佳答案

只需在查询中添加 MD5 的 Spark sql 函数即可。

Dataset<Row> namesDF = spark.sql("SELECT *, md5(name) as modified_name FROM tmpview where name like 'Spark-%'");

关于java - 向 Spark 数据集添加列并转换数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43323158/

相关文章:

c# - 数据集中特定列的所有行

java - 在java中创建一个虚拟对象

java - org.h2.jdbc.JdbcSQL异常 : Method is only allowed for a query

java - 如何以编程方式在执行程序节点中查找 Spark 版本?

scala - 如何使用 Scala 从 Spark 更新 ORC Hive 表

sql - 有用的常用 SQL 数据集?

dataset - KITTI 立体数据集中的焦距和主点是多少?

java - Spring 安全: redirect to a different host when HTTPS is required

java - 如何在Java中设置和使用类,库,包?

apache-spark - 随着表的增长,写入分区的 Hive 表需要更长的时间