我正在Spark中使用Scala
我有两个csv文件,一个具有列名,另一个具有数据,我如何集成这两个文件,以便可以使用模式和数据生成结果文件,然后必须对该文件应用操作,例如groupby,cout等,因为我需要计算这些列中的不同值。
任何人都可以帮忙在这里会很有帮助
我写了下面的代码,读取它们后,两个文件都从两个文件中分离出来,这比我现在使用union加入两个DF时如何将第一行作为模式或其他任何方式进行。任何人都可以建议。
val sparkConf = new SparkConf().setMaster("local[4]").setAppName("hbase sql")
val sc = new SparkContext(sparkConf)
val spark1 = SparkSession.builder().config(sc.getConf).getOrCreate()
val sqlContext = spark1.sqlContext
val spark = SparkSession
.builder
.appName("SparkSQL")
.master("local[*]")
.getOrCreate()
import spark.implicits._
val lines = spark1.sparkContext.textFile("C:/Users/ayushgup/Downloads/home_data_usage_2018122723_1372672.csv").map(lines=>lines.split("""\|""")).toDF()
val header = spark1.sparkContext.textFile("C:/Users/ayushgup/Downloads/Header.csv").map(lin=>lin.split("""\|""")).toDF()
val file = header.unionAll(lines).toDF()
答案 0 :(得分:1)
spark.sparkContext.textFile()
将返回rdd并且不会推断模式,即使您在rdd顶部执行.toDF()
。
sc.textFile()
用于读取非结构化文本文件。您应该使用
spark.read.format("csv").option("header",true").option("inferSchema","true").load("..path.to.csv")
从标题中获取模式。
最好将cat
文件一起在一起,创建一个新的csv并在HDFS中读取它们
cat header.csv home_data_usage_2018122723_1372672.csv >> new_home_data_usage.csv
然后
hadoop fs -copyFromLocal new_home_data_usage.csv <hdfs_path>
然后使用
spark.read.format("csv").option("header",true").option("inferSchema","true").load("..path.to.csv")