簡體   English   中英

Spark Scala數據框轉換

[英]Spark Scala Dataframe Conversion

我有一個以〜分隔的文本文件,我需要先進行一些解析,然后才能轉換為數據幀。 該代碼讀取文本文件,因為RDD [String]進行了一些解析。 然后,它將轉換為RDD [Row]。 然后使用該架構創建一個數據框。

所以下面是我的以下代碼。 它可以工作,但問題是實際架構的長度為400個字段。 我想知道是否有比鍵入attribute(1),attributes(2),attributes(3)...更簡單的方法。

我目前正在使用Spark 1.6。 CDH 5.2.2

輸入示例:

20161481132310 ~     ~"This" is a comma 10

當前代碼:

val schema_1 = StructType(Array(
StructField("EXAMPLE_1", StringType, true),
StructField("EXAMPLE_2", StringType, true),
StructField("EXAMPLE_3", StringType, true)))

val rdd = sc.textFile("example.txt")
val rdd_truncate =  rdd.map(_.split("~").map(_.trim).mkString("~"))
val row_final = rdd_truncate
  .map(_.split("~"))
  .map(attributes => Row(attributes(0),
    attributes(1),
    attributes(2)))

val df = sqlContext.createDataFrame(row_final, schema_1)

根據建議,我修改了以下內容。 除引號外,它均有效。 輸入中的“ This”將失敗。 有什么建議么?

val df = sqlContext.read
      .format("com.databricks.spark.csv")
      .option("delimiter","~")
      .schema(schema)
      .load("example.txt")
val df_final = df.select(df.columns.map(c =>trim(col(c)).alias(c)): _*)

只需使用標准的CSV閱讀器即可:

spark.read.schema(schema).option("delimiter", "~").csv("example.txt")

如果要修剪字段,請使用select

import org.apache.spark.sql.functions.{col, trim}

df.select(df.columns.map(c => trim(col(c)).alias(c)): _*)

如果使用Spark 1.x,則可以使用spark-csv

sqlContext.read
  .format("com.databricks.spark.csv")
  .schema(schema)
  .option("delimiter", "~")
  .load("example.txt")

如果由於某種原因這還不夠,您可以使用Row.fromSeq

Row.fromSeq(line.split("~").take(3))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM