Scala 使用Spark将csv.gz文件转换为拼花地板

Scala 使用Spark将csv.gz文件转换为拼花地板,scala,hadoop,amazon-s3,apache-spark,parquet,Scala,Hadoop,Amazon S3,Apache Spark,Parquet,我需要实现将AWS S3和HDFS中文件夹中的csv.gz文件转换为使用Spark(Scala首选)的拼花文件。数据的一列是时间戳,我只有一周的数据集。时间戳格式为: 'yyyy-MM-dd hh:MM:ss' 我想要的输出是,每天都有一个文件夹(或分区),其中包含特定日期的拼花文件。因此将有7个输出文件夹或分区 我只有一个模糊的想法如何做到这一点,只有sc.textFile是在我的脑海中。Spark中是否有可以转换为拼花地板的功能?如何在S3和HDFS中实现这一点 感谢您的帮助。如果您查看Sp

我需要实现将AWS S3和HDFS中文件夹中的csv.gz文件转换为使用Spark(Scala首选)的拼花文件。数据的一列是时间戳,我只有一周的数据集。时间戳格式为:

'yyyy-MM-dd hh:MM:ss'

我想要的输出是,每天都有一个文件夹(或分区),其中包含特定日期的拼花文件。因此将有7个输出文件夹或分区

我只有一个模糊的想法如何做到这一点,只有sc.textFile是在我的脑海中。Spark中是否有可以转换为拼花地板的功能?如何在S3和HDFS中实现这一点


感谢您的帮助。

如果您查看Spark和,这将实现您尝试执行的大部分操作-将CSV文件读入数据框,然后将数据框作为拼花地板写入,将使您获得大部分的操作

您仍然需要执行一些步骤来解析时间戳并使用结果对数据进行分区。

通过第二个tsv读取csv文件
/user/hduser/wikipedia/pageviews
以下代码使用spark2.0 将字符串时间戳转换为时间戳 写入拼花文件。
老话题,但我认为即使是老话题,如果回答不正确,回答也很重要

在spark版本>=2中,在您需要将databricks csv包导入工作之前,csv包已经包含在内,例如“--packages com.databricks:spark-csv_2.10:1.5.0”

示例csv:

id,name,date
1,pete,2017-10-01 16:12
2,paul,2016-10-01 12:23
3,steve,2016-10-01 03:32
4,mary,2018-10-01 11:12 
5,ann,2018-10-02 22:12
6,rudy,2018-10-03 11:11
7,mike,2018-10-04 10:10
create table part_parq_table (
    id int,
    name string
    )
partitioned by (date string)
stored as parquet
首先,您需要创建配置单元表,以便spark写入的数据与配置单元架构兼容。(在将来的版本中可能不再需要此功能)

创建表格:

id,name,date
1,pete,2017-10-01 16:12
2,paul,2016-10-01 12:23
3,steve,2016-10-01 03:32
4,mary,2018-10-01 11:12 
5,ann,2018-10-02 22:12
6,rudy,2018-10-03 11:11
7,mike,2018-10-04 10:10
create table part_parq_table (
    id int,
    name string
    )
partitioned by (date string)
stored as parquet
完成此操作后,您可以轻松读取csv并将数据框保存到该表中。第二步使用日期格式(如“yyy-mm-dd”)覆盖列日期。对于每个值,将创建一个文件夹,其中包含特定的行

SCALA Spark Shell示例:

spark.sqlContext.setConf("hive.exec.dynamic.partition", "true") 
spark.sqlContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")
前两行是配置单元配置,用于创建尚未存在的分区文件夹

var df=spark.read.format("csv").option("header","true").load("/tmp/test.csv")
df=df.withColumn("date",substring(col("date"),0,10))
df.show(false)
df.write.format("parquet").mode("append").insertInto("part_parq_table")
插入完成后,您可以直接查询表,如“select*FROMPARQ\U parq\U table”。 文件夹将在默认cloudera上的tablefolder中创建,例如。hdfs:///users/hive/warehouse/part_parq_table

希望有帮助
BR

你读过吗?第一个链接已经死了。最好只包含一个关于如何做的片段。第二个链接也过时了,这个功能是Spark 2.x内置的
spark.sqlContext.setConf("hive.exec.dynamic.partition", "true") 
spark.sqlContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")
var df=spark.read.format("csv").option("header","true").load("/tmp/test.csv")
df=df.withColumn("date",substring(col("date"),0,10))
df.show(false)
df.write.format("parquet").mode("append").insertInto("part_parq_table")