如何拆除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
+----+--------+-------+----+
我从 Oracle sqooped 数据,table 有一个 CLOB 数据类型的列,我将其设为 String 以获取 HDFS 中的数据。现在我必须 拆除 CLOB 数据并在 Hive.
中为它创建一个单独的 table我有 txt 格式的 HDFS 文件。我可以分离 CLOB 数据,并希望为 CLOB
创建 DataFrameCLOB 格式如下:
[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
+----+--------+-------+----+