Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在pyspark中拆卸CLOB?_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql_Pyspark Dataframes - Fatal编程技术网

Apache spark 如何在pyspark中拆卸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

我从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 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”,请更改正则表达式