Apache spark Spark-将JSON数组对象转换为字符串数组

Apache spark Spark-将JSON数组对象转换为字符串数组,apache-spark,dataframe,pyspark,apache-spark-sql,Apache Spark,Dataframe,Pyspark,Apache Spark Sql,作为我的dataframe的一部分,其中一列具有以下方式的数据 [{“文本”:“Tea”},{“文本”:“GoldenGlobes”}] 我想把它转换成字符串数组 [“茶”、“黄金杯”] 有人能告诉我怎么做吗 如果列的类型是数组,那么类似的方法应该可以工作(未测试): 或者如果长度不固定(我看不到没有udf的解决方案): 请参见下面不带udf的示例: 导入pyspark.sql.f函数 从pyspark导入行 从pyspark.shell导入spark 从pyspark.sql.types导入A

作为我的dataframe的一部分,其中一列具有以下方式的数据

[{“文本”:“Tea”},{“文本”:“GoldenGlobes”}]

我想把它转换成字符串数组

[“茶”、“黄金杯”]


有人能告诉我怎么做吗

如果列的类型是数组,那么类似的方法应该可以工作(未测试):

或者如果长度不固定(我看不到没有udf的解决方案):


请参见下面不带
udf
的示例:

导入pyspark.sql.f函数
从pyspark导入行
从pyspark.shell导入spark
从pyspark.sql.types导入ArrayType、StructType、StructField和StringType
df=spark.createDataFrame([
行(值='[{“text”:“Tea”},{“text”:“GoldenGlobes”}]'),
行(值=“[{text”:“goldenglobbs”}])
])
schema=ArrayType(StructType([
StructField('text',StringType())
]))
df\
.withColumn('array_of_str',f.from_json(f.col('values'),schema).text)\
.show()
输出:

+--------------------+-------------------+
|              values|       array_of_str|
+--------------------+-------------------+
|[{"text":"Tea"},{...|[Tea, GoldenGlobes]|
|[{"text":"GoldenG...|     [GoldenGlobes]|
+--------------------+-------------------+

共享Java语法:

import static org.apache.spark.sql.functions.from_json;
import static org.apache.spark.sql.functions.get_json_object;
import static org.apache.spark.sql.functions.col;
import org.apache.spark.sql.types.StructType;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import static org.apache.spark.sql.types.DataTypes.StringType;

Dataset<Row> df = getYourDf();

StructType structschema =
                DataTypes.createStructType(
                        new StructField[] {
                                DataTypes.createStructField("text", StringType, true)
                        });

ArrayType schema = new ArrayType(structschema,true);


df = df.withColumn("array_of_str",from_json(col("colname"), schema).getField("text"));
import static org.apache.spark.sql.functions.from_json;
导入静态org.apache.spark.sql.functions.get_json_对象;
导入静态org.apache.spark.sql.functions.col;
导入org.apache.spark.sql.types.StructType;
导入org.apache.spark.sql.types.DataTypes;
导入org.apache.spark.sql.types.StructField;
导入静态org.apache.spark.sql.types.DataTypes.StringType;
数据集df=getYourDf();
结构类型结构模式=
DataTypes.createStructType(
新结构域[]{
createStructField(“文本”,StringType,true)
});
ArrayType模式=新的ArrayType(structschema,true);
df=df.withColumn(“数组”,来自于json(col(“colname”),schema).getField(“text”);

数组中可能有2个以上的元素。长度不是固定的。然后您必须使用自定义项,我将编辑答案您可以使用来自_json()的
,使用
ArrayType()
创建一个架构,并选择名为
text
的字段。请参见如何使用的示例
+--------------------+-------------------+
|              values|       array_of_str|
+--------------------+-------------------+
|[{"text":"Tea"},{...|[Tea, GoldenGlobes]|
|[{"text":"GoldenG...|     [GoldenGlobes]|
+--------------------+-------------------+
import static org.apache.spark.sql.functions.from_json;
import static org.apache.spark.sql.functions.get_json_object;
import static org.apache.spark.sql.functions.col;
import org.apache.spark.sql.types.StructType;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import static org.apache.spark.sql.types.DataTypes.StringType;

Dataset<Row> df = getYourDf();

StructType structschema =
                DataTypes.createStructType(
                        new StructField[] {
                                DataTypes.createStructField("text", StringType, true)
                        });

ArrayType schema = new ArrayType(structschema,true);


df = df.withColumn("array_of_str",from_json(col("colname"), schema).getField("text"));