我有一个类似这样的数据框
+---+---------+--------------------+
| id| name| actor|
+---+---------+--------------------+
| 0| [123]| tom|
| 1| [321]| brad|
+---+---------+--------------------+
仅供参考。 '名称'-StringType()
但是我想得到这样的东西
+---+---------+--------------------+
| id| name| actor|
+---+---------+--------------------+
| 0| 123| tom|
| 1| 321| brad|
+---+---------+--------------------+
我正在尝试提取方括号之间的值并将其转换为IntegerType。我尝试使用带有正则表达式的 split 函数。但是,它不起作用。
答案 0 :(得分:0)
我认为您可以尝试以下方法。如果 df 是您指定的数据框名称
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="long">
答案 1 :(得分:0)
您可以做这样的事情,
请确保我没有更改最终DF的架构,因此它仍将充当字符串。如果你想。您将不得不更改schema
。
from pyspark.sql.types import StructType, StringType, StructField
data=sc.parallelize([
[0, [123], "tom"],
[1, [123], "brad"]
])
schema = StructType([
StructField("id", StringType(), True),
StructField("name", StringType(), True),
StructField("count", StringType(), True)
])
DF = sqlContext.createDataFrame(data, schema)
DF.show()
+---+-----+-----+
| id| name|count|
+---+-----+-----+
| 0|[123]| tom|
| 1|[123]| brad|
+---+-----+-----+
x = data.map(lambda x: [x[0],int(x[1][0]), x[2]]).toDF(schema)
x.show()
+---+----+-----+
| id|name|count|
+---+----+-----+
| 0| 123| tom|
| 1| 123| brad|
+---+----+-----+
答案 2 :(得分:0)
您可以使用explode
来解构数组:
import pyspark
from pyspark.sql import SparkSession
from pyspark import SparkContext
import pandas as pd
from pyspark.sql import functions as F
from pyspark.sql import Window
sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
columns = ['id', 'name', 'actor']
data = [(0, [123], 'tom'), (1, [321], 'brad')]
df = spark.createDataFrame(data, columns)
exploded = df.withColumn('name', F.explode('name'))
exploded.show()
+---+----+-----+
| id|name|actor|
+---+----+-----+
| 0| 123| tom|
| 1| 321| brad|
+---+----+-----+
通过检查类型,您可以看到它实际上是包含的类型:
exploded.dtypes
[('id', 'bigint'), ('name', 'bigint'), ('actor', 'string')]