如何拆除pyspark中的CLOB?

how to dismantle CLOB in pyspark?

我从 Oracle sqooped 数据,table 有一个 CLOB 数据类型的列,我将其设为 String 以获取 HDFS 中的数据。现在我必须 拆除 CLOB 数据并在 Hive.

中为它创建一个单独的 table

我有 txt 格式的 HDFS 文件。我可以分离 CLOB 数据,并希望为 CLOB

创建 DataFrame

CLOB 格式如下:

[name] Bob [Age] 21 [City] London [work] No,
[name] Steve [Age] 51 [City] London [work] Yes,
.....
around a million rows like this
sc.setLogLevel("WARN")
log_txt=sc.textFile("/path/to/data/sample_data.txt")
header = log_txt.first()

log_txt = log_txt.filter(lambda line: line != header)
log_txt.take(10)
  [u'0\tdog\t20160906182001\tgoogle.com', u'1\tcat\t20151231120504\tgoogle.com']

temp_var = log_txt.map(lambda k: k.split("\t"))

log_df=temp_var.toDF(header.split("\t"))

log_df = log_df.withColumn("field1Int", log_df["field1"].cast(IntegerType()))
log_df = log_df.withColumn("field3TimeStamp", log_df["field1"].cast(TimestampType()))

log_df.schema
StructType(List(StructField(field1,StringType,true),StructField(field2,StringType,true),StructField(field3,StringType,true),StructField(field4,StringType,true),StructField(field1Int,IntegerType,true),StructField(field3TimeStamp,TimestampType,true)))

这就是我创建 DataFrame 的方式。

我需要你的帮助来弄清楚如何拆解 CLOB,它是字符串数据类型的形式。并在其上创建一个 table。

拆解后,我希望 Table 具有以下列,例如:

+---------+---------------+----------+-----+
|Name     |Age            | City     | Work|
+---------+---------------+----------+-----+
|      Bob|           21  |London    | No  |
|    Steve|           51  |London    |Yes  |
+---------+---------------+----------+-----+

如有任何帮助,我们将不胜感激。

这里是:

import re
from pyspark.sql import Row

rdd = sc.parallelize(["[name] Bob [Age] 21 [City] London [work] No",
                      "[name] Steve [Age] 51 [City] London [work] Yes",
                      "[name] Steve [Age] [City] London [work] Yes"])

def clob_to_table(line):
    m = re.search(r"\[name\](.*)?\[Age\](.*)?\[City\](.*)?\[work\](.*)?", line)
    return Row(name=m.group(1), age=m.group(2), city=m.group(3), work=m.group(4))

rdd = rdd.map(clob_to_table)

df = spark.createDataFrame(rdd)
df.show()

+----+--------+-------+----+
| age|    city|   name|work|
+----+--------+-------+----+
| 21 | London |   Bob |  No|
| 51 | London | Steve | Yes|
|    | London | Steve | Yes
+----+--------+-------+----+