Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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-拆分一列并获取n个元素_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

Apache spark Pyspark-拆分一列并获取n个元素

Apache spark Pyspark-拆分一列并获取n个元素,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我想获取一列并使用一个字符拆分一个字符串。按照惯例,我知道方法拆分会返回一个列表,但编码时我发现返回的对象只有方法getItem或getField,API中有以下描述: @从1.3开始 def getItemself,键: 从列表中获取位于“序号”位置的项的表达式, 或者从dict中按键获取项目。 @从1.3开始 def getFieldself,名称: 在StructField中按名称获取字段的表达式。 显然,这不符合我的要求,例如,对于A_B_C_D列中的文本,我希望将A_B_C_D和D分为

我想获取一列并使用一个字符拆分一个字符串。按照惯例,我知道方法拆分会返回一个列表,但编码时我发现返回的对象只有方法getItem或getField,API中有以下描述:

@从1.3开始 def getItemself,键: 从列表中获取位于“序号”位置的项的表达式, 或者从dict中按键获取项目。 @从1.3开始 def getFieldself,名称: 在StructField中按名称获取字段的表达式。 显然,这不符合我的要求,例如,对于A_B_C_D列中的文本,我希望将A_B_C_D和D分为两个不同的列

这是我正在使用的代码

从pyspark.sql.functions导入regexp_extract、col、split df_test=spark.sqlSELECT*FROM db_test.table_test 将转换应用于数据 split_col=splitdf_test[“全文”],“' df_split=df_test.带有列'Last_Item',split_col.getItem3 找一个例子:

从pyspark.sql导入行 从pyspark.sql.functions导入regexp_extract、col、split l=[Item1\u Item2\u ItemN,first item\u second item\u last item,this应位于irstcolumn\u this应位于elstcolumn] rdd=sc.parallelizel datax=rdd.maplambda x:RowfullString=x df=sqlContext.createDataFramedatax split_col=splitdf['fullString','' df=df.带有列'LastItemOfSplit',拆分列'getItem2' 结果:

完整字符串LastItemOfSplit 项目1\u项目2\u项目n项目n 第一项第二项最后一项最后一项 此字段应位于FirstColumn\u此字段应位于FirstColumn null中 我的预期结果是总是最后一项

完整字符串LastItemOfSplit 项目1\u项目2\u项目n项目n 第一项第二项最后一项最后一项 这应该在第一列中\u这应该在第二列中这应该在第二列中 可以使用getItemsize-1从数组中获取最后一项:

例如:

df=spark.createDataFrame[[['A','B','C','D']],[[[['E','F']]],['split'] df.show +------+ |分裂| +------+ |[A、B、C、D]| |[英、法]| +------+ 导入pyspark.sql.F函数 df.withColumn'lastItem',df.split.getItemF.sizedf.split-1.show +------+----+ |拆分|最后一项| +------+----+ |[A,B,C,D]| D| |[E,F]| F| +------+----+ 对于您的情况:

从pyspark.sql.functions导入regexp_extract、col、split、size df_test=spark.sqlSELECT*FROM db_test.table_test 将转换应用于数据 split_col=splitdf_test[“全文”],“' df_split=df_test。使用列'Last_Item',split_col.getItemsizesplit_col-1
可以将正则表达式模式传递给

以下内容适用于您的示例:

从pyspark.sql.functions拆分 split\u col=splitdf['fullString',r\ux=+$ df=df.带有列'LastItemOfSplit',拆分列'getItem1' df.showtruncate=False +----------------------------+--------------+ |fullString | LastItemOfSplit| +----------------------------+--------------+ |项目1_项目2_项目n |项目2| |第一项第二项最后一项第二项| |这应该在第一列中,这应该在第一列中,这应该在第一列中| +----------------------------+--------------+ 该模式的含义如下:

_文字下划线 ?=.+$积极展望未来。直到绳子的末端$
这将拆分最后一个下划线上的字符串。然后调用.getItem1以获取结果列表中索引1处的项。

您的方法有什么问题?您可以传入一个regexp模式以进行拆分。也许splitdf_test[Full_text],r_?=.$可以使用。@Psidom我希望使用另一种方式来访问分割结果,而不是通过索引号,就像结果列表的最后一个元素一样。数据中的大小不同。