当前位置: 首页 > 面试题库 >

在PySpark中爆炸

权胜泫
2023-03-14
问题内容

我想从包含单词列表的DataFrame转换为每个单词都在其自己行中的DataFrame。

如何在DataFrame中的列上爆炸?

这是我尝试的一些示例,您可以在其中取消注释每个代码行并获取以下注释中列出的错误。我在带有Spark 1.6.1的Python 2.7中使用PySpark。

from pyspark.sql.functions import split, explode
DF = sqlContext.createDataFrame([('cat \n\n elephant rat \n rat cat', )], ['word'])
print 'Dataset:'
DF.show()
print '\n\n Trying to do explode: \n'
DFsplit_explode = (
 DF
 .select(split(DF['word'], ' '))
#  .select(explode(DF['word']))  # AnalysisException: u"cannot resolve 'explode(word)' due to data type mismatch: input to function explode should be array or map type, not StringType;"
#   .map(explode)  # AttributeError: 'PipelinedRDD' object has no attribute 'show'
#   .explode()  # AttributeError: 'DataFrame' object has no attribute 'explode'
).show()

# Trying without split
print '\n\n Only explode: \n'

DFsplit_explode = (
 DF 
 .select(explode(DF['word']))  # AnalysisException: u"cannot resolve 'explode(word)' due to data type mismatch: input to function explode should be array or map type, not StringType;"
).show()

请指教


问题答案:

explodesplit是SQL函数。两者都在SQL上运行Columnsplit将Java正则表达式作为第二个参数。如果要在任意空格上分离数据,则需要这样的操作:

df = sqlContext.createDataFrame(
    [('cat \n\n elephant rat \n rat cat', )], ['word']
)

df.select(explode(split(col("word"), "\s+")).alias("word")).show()

## +--------+
## |    word|
## +--------+
## |     cat|
## |elephant|
## |     rat|
## |     rat|
## |     cat|
## +--------+


 类似资料:
  • 我有一个数据表 而这个结果就在这里 我想爆炸dev_property(列) 怎么爆炸?

  • 我已经用Java编写了这个开关案例程序。但是,while循环没有中断。代码如下: 我不知道,为什么break函数在这个循环中不起作用…请帮帮我..

  • 我有一个模式,其中每行包含多个数组列,我想独立于每个数组列爆炸。 假设我们有列: 我想要一个输出: 想法? (哦,我正在尝试这样做,所以我不必随着模式的变化而更新代码,也因为实际的模式有点大…) PS -支持这个非常相似但不同的问题,我无耻地从这个问题中窃取了示例数据。 编辑:@oliik赢了,但是,如果能用<code>df来实现这一点,那也太棒了。flatMap(主要是因为我仍然不去摸索<cod

  • 这是我在使用大量StackOverflow后的第一个问题,如果我提供的信息不准确或不完整,请更正我 直到本周,我还按照我在互联网上找到的众多指南之一,使用pyspark运行了一个colab笔记本设置,但本周它开始出现一些不同的错误。 使用的代码大致如下: 我已经尝试将Java版本从8更改为11,并在https://downloads.apache.org/spark/上使用所有可用的Spark构建

  • 上面写着 我怎么才能修好这个?是否需要设置一个环境变量来将Python指向pyspark头/库/等?如果我的spark安装是/spark/,我需要包括哪些pyspark路径?或者pyspark程序只能从pyspark解释器运行吗?

  • 我一直在努力研究如何使用maven overlay插件将项目排除在爆炸战争之外。 我有以下内容: xml和applicationcontext.xml可以很好地排除,但它们位于:${basedir}/src/main/webapp/web-inf/下 无论我尝试什么,这些文件是静止的,覆盖,尽管排除。