【问题标题】:How to add Schema to a file from another File in spark Scala如何在 Spark Scala 中将模式添加到另一个文件中的文件
【发布时间】:2019-06-12 17:07:52
【问题描述】:

我正在使用 Spark 并使用 Scala

我有两个 csv 文件,一个有列名,另一个有数据,我如何整合它们,以便我可以使用架构和数据制作结果文件,然后我必须对该文件应用操作,例如groupby、cout 等,因为我需要计算这些列中的不同值。

所以任何人都可以在这里提供帮助将非常有帮助

我写了下面的代码,在读取它们之后从两个文件中创建了两个 DF,而不是我现在使用 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 文件 = header.unionAll(lines).toDF()

【问题讨论】:

    标签: sql scala apache-spark hadoop


    【解决方案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")
    

    【讨论】:

    • 还有什么其他方法可以添加两个文件,直接使用spark scala读取带有列的数据,而不使用hdfs或其命令?
    猜你喜欢
    • 2013-06-10
    • 2018-06-21
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多