Apache spark 如何在pyspark中拆卸CLOB?
我从Oracle查询了数据,表中有一列具有CLOB数据类型,我将其设置为字符串以获取HDFS中的数据。现在我必须拆除CLOB数据,并在Hive中为其创建一个单独的表 我有txt格式的HDFS文件。我可以分离CLOB数据,并希望为CLOB创建数据帧 CLOB的格式如下:Apache spark 如何在pyspark中拆卸CLOB?,apache-spark,pyspark,apache-spark-sql,pyspark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,Pyspark Dataframes,我从Oracle查询了数据,表中有一列具有CLOB数据类型,我将其设置为字符串以获取HDFS中的数据。现在我必须拆除CLOB数据,并在Hive中为其创建一个单独的表 我有txt格式的HDFS文件。我可以分离CLOB数据,并希望为CLOB创建数据帧 CLOB的格式如下: [name] Bob [Age] 21 [City] London [work] No, [name] Steve [Age] 51 [City] London [work] Yes, ..... around a million
[name] Bob [Age] 21 [City] London [work] No,
[name] Steve [Age] 51 [City] London [work] Yes,
.....
around a million rows like this
这就是我创建DataFrame的方式
我需要您的帮助,以找出如何拆除CLOB,它是字符串数据类型的形式。然后在上面创建一个表。
分解后,我希望该表具有以下列:
+---------+---------------+----------+-----+
|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
+----+--------+-------+----+
这是:
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
+----+--------+-------+----+
非常感谢你!我只需要这个。但是有两个疑问,首先,我看到你在数据的开头和结尾使用了引号,但是我有一个数百万条记录的文件,那么你建议怎么做呢?其次,如果在某些情况下[City]丢失了,我尝试了,但我得到了错误,我想在没有值的时候将其标记为NULL。还有什么建议吗?再次感谢!1-此语法用于加载您的示例,而无需创建文件。如果我有文件,则可以通过以下操作加载文件:text_file=sc.textFile(“hdfs://...")这假设您的文件将每行保存在一行中,如果这不是格式,您可能应该执行预处理,将文件每行拆分为一行,每行2-这取决于包含缺失实例的方式,您可能必须更改正则表达式,例如,如果某个城市缺失但包含标签城市,则可以包含NULL,但如果标签“城市”缺少更改注册表非常感谢!我只需要这个。但是有两个疑问,首先,我看到你在数据的开头和结尾使用了引号,但是我有一个数百万条记录的文件,那么你建议怎么做呢?其次,如果在某些情况下[City]丢失了,我尝试了,但我得到了错误,我想在没有值的时候将其标记为NULL。还有什么建议吗?再次感谢!1-此语法用于加载您的示例,而无需创建文件。如果我有文件,则可以通过以下操作加载文件:text_file=sc.textFile(“hdfs://...")这假设您的文件将每行保存在一行中,如果这不是格式,您可能应该执行预处理,将文件每行拆分为一行,每行2-这取决于包含缺失实例的方式,您可能必须更改正则表达式,例如,如果某个城市缺失但包含标签城市,则可以包含NULL,但如果缺少标签“city”,请更改正则表达式