如何在 Databricks 上使用 Apache Spark/python 将字符串拆分为多列

尝试使用 python 在 Databricks 上将字符串列拆分为 4 列:A、B、C、D。

# Load CSV file
df = spark.read.format("csv").options(header='false').load("file path")

# Rename header
RawDataDF = RawDataDF.withColumnRenamed("_c0","raw")

#Attempt to split "raw" into 4 columns:
splitDF = RawDataDF.withColumn("split_raw_arr",split("raw"," "))
uDataDF= uDataDF.withColumn('Column A',splitDF.getItem(0))
uDataDF= uDataDF.withColumn('Column B',splitDF.getItem(1))
uDataDF= uDataDF.withColumn('Column C',splitDF.getItem(2))
uDataDF= uDataDF.withColumn('Column D',splitDF.getItem(3))

错误信息:

AttributeError: 'DataFrame' object has no attribute 'getItem'

感谢任何建议。

ioublack 回答:如何在 Databricks 上使用 Apache Spark/python 将字符串拆分为多列

使用 split 来创建单独的列是正确的。

但是,您不能直接在数据帧 (getItem) 上使用 splitDF,您收到的错误表明了这一点。

此外,您可能错过了问题中 uDataDF 的初始化步骤,并且您正在创建基于 spiltDF 的列值,这在没有 join 的情况下也是不可能的。

withColumn 不允许这样做,因为它需要 Column 类型作为第二个参数。

您可以直接使用 splitDF 创建列并进一步选择要保留的列以创建新的数据框 - uDataDF

典型示例 - 拆分

input_list = [
  (1,"7 6 10"),(2,"4 59 9"),(4,"5 00 12"),(5,"0 10 241"),(6,"7 19 62"),(7,"1 42 743"),(8,"6 23 90")
]


sparkDF = sql.createDataFrame(input_list,['id','raw_str'])

sparkDF = sparkDF.withColumn('A',F.split(F.col('raw_str'),' ').getItem(0).cast(DoubleType()))\
                 .withColumn('B',' ').getItem(1).cast(DoubleType()))\
                 .withColumn('C',' ').getItem(2).cast(DoubleType()))


uDataDF = sparkDF.select(['A','B','C'])

uDataDF.show()
+---+----+-----+
|  A|   B|    C|
+---+----+-----+
|7.0| 6.0| 10.0|
|4.0|59.0|  9.0|
|5.0| 0.0| 12.0|
|0.0|10.0|241.0|
|7.0|19.0| 62.0|
|1.0|42.0|743.0|
|6.0|23.0| 90.0|
+---+----+-----+

本文链接:https://www.f2er.com/482.html

大家都在问