Spark:读取文本文件存为hive表最佳实践
存储表的时候,由以下几点要注意:
写入hive表前用coalesce
方法对原始数据进行重新分区。
因为读取的数据一般是纯文本,写入hive中的默认是用snappy压缩过的parquet(.snappy.parquet),所以分区数如果保持原来的话可能会造成每个.snappy.parquet文件只有20~30MB大小,一般将分区数除以3或4左右即可。
df.coalesce(df.rdd.getNumPartitions/3)
.write
.mode(SaveMode.Append)
.saveAsTable("tablename")
过滤掉那些为null
的行,能防止处理数据过程中报空指针异常。删除行的方式为:
val res = df.na.drop(Seq("column1", "column2", "column3"))
// 这3个字段只要有1个为null就过滤掉。