簡體   English   中英

使用 Pyspark 如何將純文本轉換為 csv 文件

[英]Using Pyspark how to convert plain text to csv file

當我創建一張hive表時,數據如下。

數據文件

<__name__>abc
<__code__>1
<__value__>1234
<__name__>abcdef
<__code__>2
<__value__>12345
<__name__>abcdef
<__code__>2
<__value__>12345
1234156321
<__name__>abcdef
<__code__>2
<__value__>12345
...

我可以在不轉換文件的情況下立即創建表格嗎? 這是一個純文本文件,重復了三列。

如何轉換 dataframe? 還是 csv 文件?

我想

| name   | code | value
| abc    | 1    | 1234 
| abcdef | 2    | 12345
...

或者

abc,1,1234
abcdef,2,12345
...

我這樣解決了我的問題。

data = spark.read.text(path)

rows = data.rdd.zipWithIndex().map(lambda x: Row(x[0].value, int(x[1]/3)))

schema = StructType() \
      .add("col1",StringType(), False) \
      .add("record_pos",IntegerType(), False)
      
df = spark.createDataFrame(rows, schema)

df1 = df.withColumn("key", regexp_replace(split(df["col1"], '__>')[0], '<|__', '')) \
        .withColumn("value", regexp_replace(regexp_replace(split(df["col1"], '__>')[1], '\n', '<NL>'), '\t', '<TAB>'))

dataframe = df1.groupBy("record_pos").pivot("key").agg(first("value")).drop("record_pos")

dataframe.show()

val path = "file:///C:/stackqustions/data/stackq5.csv" val data = sc.textFile(path)

  import spark.implicits._

  val rdd = data.zipWithIndex.map {
    case (records, index) => Row(records, index / 3)

  }

  val schema = new StructType().add("col1", StringType, false).add("record_pos", LongType, false)
  val df = spark.createDataFrame(rdd, schema)  
  val df1 = df
    .withColumn("key", regexp_replace(split($"col1", ">")(0), "<|__", ""))
    .withColumn("value", split($"col1", ">")(1)).drop("col1")

  df1.groupBy("record_pos").pivot("key").agg(first($"value")).drop("record_pos").show

結果:

+----+------+-----+
|code|  name|value|
+----+------+-----+
|   1|   abc| 1234|
|   2|abcdef|12345|
|   2|abcdef|12345|
|   2|abcdef|12345|
+----+------+-----+

暫無
暫無

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

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