本文从Spark的基本特点出发,借助大量例子详细介绍了如何使用Python调用Spark新特性、处理结构化及非结构化数据、使用PySpark中基本可用数据类型、生成机器学习模型、进行图像操作以及阅读串流数据等新兴技术内容。
作者:(美)托马兹·卓巴斯 作者:丹尼·李 译者:栾云杰 译者:陈瑶 译者:刘旭斌
托马兹·卓巴斯(Tomasz Drabas),微软数据科学家,他拥有超过13年的数据分析经验。托马兹每天都和大数据打交道,解决机器学习问题(如异常检测、流失预测),并使用Spark进行模式识别。丹尼·李(Denny Lee),微软Azure DocumentDB团队的首席项目经理。他是一个经验丰富的分布式系统和数据科学工程师,拥有超过18年的经验,擅长开发互联网级别基础架构、数据平台和预测分析系统(包括内部部署和云环境)。
利用Python和Spark构建大规模数据的分析与挖掘, 如何使用Python来调用Spark的新特性; 如何处理结构化和非结构化的数据; 如何使用PySpark中一些基本的可用数据类型; 如何生成机器学习模型; 将会全面介绍PySpark各个包的使用方法。 目前我看到过最好地一本介绍PySpark中文图...
评分利用Python和Spark构建大规模数据的分析与挖掘, 如何使用Python来调用Spark的新特性; 如何处理结构化和非结构化的数据; 如何使用PySpark中一些基本的可用数据类型; 如何生成机器学习模型; 将会全面介绍PySpark各个包的使用方法。 目前我看到过最好地一本介绍PySpark中文图...
评分利用Python和Spark构建大规模数据的分析与挖掘, 如何使用Python来调用Spark的新特性; 如何处理结构化和非结构化的数据; 如何使用PySpark中一些基本的可用数据类型; 如何生成机器学习模型; 将会全面介绍PySpark各个包的使用方法。 目前我看到过最好地一本介绍PySpark中文图...
评分利用Python和Spark构建大规模数据的分析与挖掘, 如何使用Python来调用Spark的新特性; 如何处理结构化和非结构化的数据; 如何使用PySpark中一些基本的可用数据类型; 如何生成机器学习模型; 将会全面介绍PySpark各个包的使用方法。 目前我看到过最好地一本介绍PySpark中文图...
评分利用Python和Spark构建大规模数据的分析与挖掘, 如何使用Python来调用Spark的新特性; 如何处理结构化和非结构化的数据; 如何使用PySpark中一些基本的可用数据类型; 如何生成机器学习模型; 将会全面介绍PySpark各个包的使用方法。 目前我看到过最好地一本介绍PySpark中文图...
而令我印象最为深刻的,要数本书的第十章,它仿佛是一次对PySpark学习历程的全面总结和升华。作者没有在这里仅仅是罗列一些“最佳实践”,而是将之前章节中分散的知识点,以一种高度概括和提炼的方式,呈现出来,仿佛是在为我们绘制一幅PySpark应用的全景图。 他首先对PySpark的整体架构和设计理念进行了深刻的总结,从RDD到DataFrame,再到Dataset,清晰地勾勒出PySpark在数据抽象层面的演进,并强调了其背后统一的Catalyst优化器在提升性能方面的核心作用。这让我对PySpark的“内在逻辑”有了更深刻的理解,明白它为何能够如此高效地处理海量数据。 接着,作者提炼出了几个贯穿始终的核心主题。比如,他强调了“数据为王”的理念,并再次阐述了数据清洗、预处理在任何大数据项目中的关键性。他以一种宏观的视角,回顾了我们之前在案例中进行的各种数据治理工作,并给出了更通用的方法论,让我明白,无论使用何种工具,数据的质量永远是第一位的。 他还深入剖析了“算法与工程的融合”。我之前总是将机器学习算法和大数据工程分得很开,而作者则强调了两者之间的紧密联系,以及如何在PySpark这样的平台上,将复杂的算法模型与大规模的数据处理流程有机地结合起来。他用一种“软硬兼施”的思路,让我理解了如何设计出既有理论基础又具备工程可行性的解决方案。 在性能优化的部分,作者并没有重复之前详细的讲解,而是提炼出了几个关键的优化原则,比如“避免不必要的Shuffle”、“充分利用内存”、“合理选择数据格式”等,并将其与之前的案例进行了巧妙的关联,让我能够在更宏观的层面上理解性能优化的重要性。 最后,作者还对PySpark的学习和应用提出了几点宝贵的建议。他鼓励我们要保持持续学习的热情,关注Spark社区的最新动态,并且要勇于将学到的知识应用到实际项目中去。他强调了“实践出真知”的重要性,并鼓励我们要积极参与开源项目,贡献自己的力量。 读完第十章,我感觉自己仿佛经历了一次PySpark的“闭关修炼”。那些曾经零散的知识点,如今在我心中汇聚成了一股强大的力量。这本书,不仅仅是教会了我一项技术,更是为我点亮了一条通往大数据专家之路。它让我看到了PySpark的无限可能,也激发了我不断探索和学习的动力。
评分读到第六章,我才真正体会到这本书的“实战”二字是如何体现的。作者没有停留在理论的讲解,而是将前几章学到的知识,融会贯通,通过一个个精心设计的案例,来展示PySpark在解决实际大数据问题时的强大威力。第一个案例,聚焦于电商平台的日志分析。 作者从模拟生成海量日志数据开始,详细演示了如何使用PySpark来解析这些日志,提取关键信息,比如用户ID、访问时间、商品ID、操作类型等。他不仅仅是展示了如何读取和处理数据,更重要的是,他教会了我们如何进行数据清洗和转换,比如处理缺失值、统一时间格式、过滤无效日志等。 接着,他通过PySpark实现了用户行为路径分析,比如计算用户的访问频率、热门商品榜单、以及用户在不同页面之间的跳转概率。让我印象深刻的是,作者在讲解用户行为路径分析时,并没有仅仅依赖于简单的SQL操作,而是巧妙地运用了PySpark的窗口函数和用户自定义函数(UDF),来完成更精细化的分析。 他还展示了如何利用PySpark来构建用户画像,比如根据用户的购买记录、浏览偏好等信息,为用户打上各种标签。这部分内容,对于理解用户行为和进行个性化推荐有着极其重要的意义。 随后的一个案例,聚焦于金融领域的风险控制。作者模拟了交易数据,演示了如何使用PySpark来检测异常交易模式,比如短时间内出现大量小额交易、用户交易行为突然变化等。他介绍了如何利用统计学方法和机器学习算法,结合PySpark的强大计算能力,来构建实时或近实时的风险预警系统。 让我惊叹的是,作者在讲解异常检测算法时,并没有使用过于复杂的模型,而是选择了那些在PySpark上易于实现且效果显著的算法,比如基于规则的检测、简单的聚类分析等。这让我明白,在实际应用中,选择合适的工具和方法,比盲目追求复杂模型更为重要。 他还在金融案例中,展示了如何使用PySpark进行数据可视化,比如将分析结果以图表的形式呈现出来,这对于向业务部门解释分析结果和沟通非常有帮助。 读完第六章,我感觉自己仿佛经历了一场真实的大数据项目实战。这些案例的深度和广度,让我受益匪浅,也让我更加坚信,PySpark绝对是处理现实世界大数据挑战的最佳选择之一。
评分第九章的内容,让我对PySpark在实际项目中的应用场景有了更深层次的理解,并且看到了它在未来发展中的巨大潜力。作者没有停留在理论和基础功能的介绍,而是将目光投向了PySpark在一些前沿领域的应用。 首先,他深入探讨了PySpark在人工智能和深度学习领域的结合。我之前一直认为,深度学习主要依赖于TensorFlow、PyTorch等框架,而作者则展示了如何利用PySpark来处理海量数据,为深度学习模型提供高质量的训练数据。他介绍了如何使用PySpark来进行数据预处理、特征工程,以及如何将PySpark DataFrame与TensorFlow、PyTorch等深度学习框架进行集成,通过`tf.data` API或PyTorch `DataLoader`来加载数据,实现端到端的模型训练流程。 我尤其欣赏作者在介绍集成时,不仅给出了代码示例,还详细解释了其中的原理和注意事项,比如数据在PySpark和深度学习框架之间如何传递,以及如何优化数据加载的效率。这让我看到,PySpark完全可以成为深度学习工作流中的重要一环,尤其是在处理大规模数据集时。 接着,作者将话题转向了PySpark在物联网(IoT)数据处理中的应用。他描述了物联网设备产生海量、实时、多模态数据的特点,以及PySpark如何通过Structured Streaming来高效地接收、处理和分析这些数据。他展示了如何利用PySpark来监测传感器数据、识别异常模式、预测设备故障,以及构建智能化的物联网应用。 作者还简要提及了PySpark在区块链技术中的潜在应用,比如如何利用PySpark来分析区块链上的交易数据,识别欺诈行为,或者进行链上数据的可视化分析。虽然这部分内容篇幅不多,但足以让我感受到PySpark的通用性和在未来新兴技术领域中的可能性。 另外,作者还对PySpark的未来发展趋势进行了一些展望。他提到了Spark 3.x的新特性,比如对AI和GPU的支持增强,以及对Python API的持续优化。他还展望了PySpark在Serverless计算、边缘计算等场景下的发展前景。 读完第九章,我感觉自己对PySpark的认知又向前迈进了一大步。那些曾经让我觉得遥不可及的前沿应用,如今在我眼中变得触手可及。这本书,不仅仅是教授了一门技术,更是为我打开了一扇探索大数据未来发展的大门。
评分让我非常惊喜的是,这本书在第三章深度探讨了PySpark的性能优化策略。我之前一直认为,只要代码写得没问题,性能自然就好,但这本书彻底颠覆了我的这个想法。作者首先从Spark的执行机制入手,详细讲解了Stage、Task、Partition等概念,并用生动的图示来解释Spark的DAG(有向无环图)调度器是如何工作的。这让我明白,Spark的性能优化并非天马行空,而是有其内在的运行逻辑可循。 其中,关于Shuffle的讲解,绝对是全书的亮点之一。作者深入浅出地解释了Shuffle发生的原因,以及它对性能带来的巨大影响。他列举了多种可能导致Shuffle的操作,比如`groupByKey`、`reduceByKey`(与`groupByKey`的区别)、`join`等,并详细分析了每种操作在Shuffle过程中数据的流动和计算过程。我之前一直对`groupByKey`和`reduceByKey`的区别感到困惑,通过作者的详细对比和示例,终于明白了`reduceByKey`在本地预聚合的优势,这对于我今后优化数据聚合操作至关重要。 作者还花了大篇幅介绍了几种关键的性能调优技术。例如,他详细讲解了如何通过调整Spark的配置参数来优化性能,比如`spark.sql.shuffle.partitions`、`spark.default.parallelism`等,并解释了这些参数的含义以及它们对Spark作业执行的影响。他还介绍了广播join(Broadcast Join)和排序合并join(Sort-Merge Join)等不同的join策略,以及如何根据数据量的大小和分布来选择最优的join方式。 我特别喜欢作者在介绍缓存(Caching)和持久化(Persisting)时的讲解。他清晰地解释了`cache()`和`persist()`的区别,以及不同存储级别(Memory_Only、Memory_and_Disk等)对性能的影响。通过示例,我能够直观地看到,对于重复使用的数据集,进行缓存能够显著减少计算时间。 此外,作者还提到了数据倾斜的常见原因和解决方案。他分享了一些实用的技巧,例如使用`salting`(加盐)技术来解决join操作中的数据倾斜问题,以及如何通过调整partition数量来改善数据分布。这些都是非常贴近实际生产环境中的问题,让我觉得这本书不仅仅是理论知识的堆砌,更是实战经验的总结。 读完第三章,我感觉自己对PySpark的性能优化有了一个全新的认识。我不再是那个只会写代码的初学者,而是能够开始思考如何写出更高效、更健壮的PySpark程序。这本书为我打开了一扇通往高性能大数据处理的大门。
评分第八章的内容,让我对PySpark的部署和管理有了更深刻的理解。作者在这部分,并没有仅仅停留在编写代码的层面,而是将目光投向了如何将PySpark应用程序落地,并使其在生产环境中稳定运行。首先,他详细介绍了PySpark的几种部署模式,包括本地模式、Standalone模式、YARN模式以及Mesos模式。 我之前一直对Standalone模式和YARN模式的区别感到困惑,而作者通过详细的解释和对比,让我清晰地理解了它们各自的特点、适用场景以及优缺点。他甚至给出了在不同模式下启动PySpark集群的详细命令和配置步骤,这对于我实际操作非常有指导意义。 接着,作者深入探讨了PySpark作业的监控和日志分析。他介绍了如何利用Spark UI来监控作业的运行状态,包括各个Stage的执行时间、Task的完成情况、内存和CPU的使用率等。这让我明白,Spark UI是一个多么强大的诊断工具,能够帮助我们及时发现和解决性能瓶颈。 他还分享了如何通过分析Spark的日志来定位问题。他详细解释了Driver日志、Executor日志等不同日志的作用,以及如何从中提取关键信息来排查错误。这一点,对于我在生产环境中排查问题,绝对是不可或缺的技能。 在资源管理方面,作者也给出了许多实用的建议。他介绍了如何合理配置Spark的资源参数,比如`spark.executor.instances`、`spark.executor.cores`、`spark.executor.memory`等,以确保作业能够高效运行,同时避免资源浪费。他还提到了公平调度器(Fair Scheduler)和FIFO调度器(First-In, First-Out Scheduler)等资源调度策略,让我能够根据实际需求来选择最优的调度方式。 此外,作者还触及了PySpark应用程序的打包和部署。他介绍了如何使用PyInstaller等工具来打包PySpark应用程序,以及如何将其部署到不同的环境中。这让我看到,PySpark不仅仅是写在Jupyter Notebook里的代码,更是可以像其他应用程序一样进行部署和分发。 读完第八章,我感觉自己对PySpark的“落地”有了更清晰的认识。那些曾经让我感到遥不可及的生产环境部署和管理问题,如今在我眼中变得清晰而可行。这本书,真正地为我提供了一个从开发者到运维者的桥梁。
评分第四章的内容,着实让我感受到了PySpark在处理复杂数据场景中的强大能力。作者没有局限于简单的ETL操作,而是深入探讨了机器学习和图计算这两个PySpark的重要应用领域。在机器学习方面,他介绍了MLlib库,并从最基础的机器学习概念讲起,比如监督学习和无监督学习,以及常用的算法,如线性回归、逻辑回归、K-Means聚类等。 我尤其欣赏作者在介绍MLlib API时,并非仅仅罗列函数,而是结合实际的数据集,一步步地演示如何使用MLlib进行模型训练、评估和预测。他提供的代码示例非常清晰,并且会详细解释每一步的目的和背后的原理。例如,在讲解特征工程时,他介绍了StandardScaler、MinMaxScaler等特征缩放方法,以及OneHotEncoder等类别特征编码方法,并解释了这些操作为何对模型性能至关重要。 他对于模型评估的讲解也十分到位,详细介绍了RMSE、R-squared、Precision、Recall、F1-score等常用的评估指标,并解释了它们各自的适用场景。这让我明白,选择合适的评估指标对于准确衡量模型性能是多么关键。 而在图计算方面,作者介绍了GraphX库,并从图论的基本概念讲起,如节点(Vertex)、边(Edge)、图(Graph)等。他详细演示了如何使用GraphX来表示和处理图结构数据,以及如何执行常见的图算法,例如PageRank、Connected Components等。我之前对图计算的概念一直比较模糊,通过作者的讲解和示例,我才真正理解了它在社交网络分析、推荐系统等领域的广泛应用。 作者在介绍GraphX的API时,也同样注重实战性。他通过一个具体的图数据场景,演示了如何构建图、如何进行顶点和边的操作,以及如何执行图算法。这些示例让我能够清晰地看到GraphX是如何将复杂的图计算问题转化为一系列可执行的操作。 总的来说,第四章的内容极大地拓宽了我对PySpark应用场景的认知。它让我意识到,PySpark不仅仅是一个数据处理工具,更是一个能够赋能复杂分析任务的强大平台。通过这一章的学习,我感觉自己离将PySpark应用于更具挑战性的项目又近了一步。
评分第五章的抵达,对我来说,简直如同在探索PySpark的“黑魔法”。作者这次将目光聚焦在PySpark的进阶主题上,而这些主题,恰恰是我之前工作中常常遇到瓶颈,却又难以找到系统性解决方案的地方。首先,他深入剖析了Spark的内存管理机制,不仅仅是简单的提一下“内存”,而是详细阐述了JVM堆、堆外内存、Spark内存模型(Execution Memory、Storage Memory、Unified Memory)等概念。 让我印象最深刻的是,作者通过图示和具体的参数解释,将Spark的内存分配和回收策略讲得明明白白。他甚至提到了GC(垃圾回收)对Spark性能的影响,以及如何通过调整GC参数来优化性能。这一点,之前我从来没有想到过,也让我意识到,对底层原理的深刻理解,是实现极致性能的关键。 接着,作者开始讲解Spark Streaming和Structured Streaming。这部分的内容,对于我这种需要处理实时数据流的开发者来说,简直是及时雨。他首先回顾了Spark Streaming的微批处理模型,并详细解释了DStream(Discretized Stream)的概念。然后,他花费了大量的篇幅来介绍Structured Streaming,强调了它基于DataFrame/Dataset的API,以及其端到端的容错机制。 作者通过一个实际的场景,比如从Kafka消费实时数据,然后进行窗口聚合计算,最后将结果写入数据库,来演示Structured Streaming的强大功能。他详细解释了Trigger(触发器)、Watermarking(水印)、Output Mode(输出模式)等概念,让我能够理解如何控制流处理的进度和处理迟到数据。 最令我感到振奋的是,作者还提及了PySpark在分布式数据库和云环境中的集成。他介绍了一些常用的集成方式,比如如何使用PySpark与Hive、HBase等数据仓库进行交互,以及如何在AWS、Azure、GCP等云平台上部署和运行PySpark集群。这些内容,直接关系到我在实际生产环境中部署和应用PySpark的能力,具有极高的实践价值。 读完第五章,我感觉自己对PySpark的掌握程度又上了一个台阶。那些曾经让我望而却步的“高阶”主题,如今在我眼中变得清晰而可行。这本书,真正地引领我走进了PySpark的深水区,并且让我具备了应对更复杂场景的能力。
评分这本书的第二章,简直是打开了PySpark世界的大门,让我真切地感受到了代码的魅力。作者并没有一开始就丢出复杂的API,而是从最基础的环境搭建和第一个PySpark应用程序的编写开始。他详细地列举了所需的软件和依赖,并提供了详细的安装步骤,无论是Windows还是Linux系统,都能找到对应的解决方案,这对于很多新手来说,绝对是巨大的福音,大大降低了入门的门槛。 最让我印象深刻的是,作者在介绍第一个“Hello, Spark!”程序时,并没有仅仅停留在代码的运行,而是深入剖析了每一行代码的含义。比如,`SparkSession.builder.appName("MyApp").getOrCreate()`这一行,他不仅仅是告诉你这是创建SparkSession,更是解释了`appName`的作用,以及`getOrCreate()`的智能之处,让我明白这是一个多么灵活和强大的入口。 接下来,作者对PySpark的核心数据结构——DataFrame的介绍,简直是教科书级别的。他从DataFrame的创建方式开始,无论是从CSV、JSON文件读取,还是通过Python列表创建,都提供了详实的示例代码。更重要的是,他详细解释了DataFrame的Schema概念,以及Schema的推断和手动定义的重要性。这让我明白,结构化的数据在Spark中是如何被高效处理的。 在DataFrame的操作方面,作者循序渐进地介绍了各种常见的Transformation和Action。比如,`select`、`filter`、`groupBy`、`agg`等操作,他都提供了清晰的代码示例,并且在每个示例之后,都会详细解释操作的逻辑和预期结果。让我能够一边看代码,一边在脑海中构建出数据变化的图景。 尤其值得称赞的是,作者在介绍DataFrame的SQL查询功能时,将SQL的简洁与DataFrame的编程能力完美结合。他展示了如何将DataFrame注册为临时视图,然后使用Spark SQL进行查询,这对于熟悉SQL的开发者来说,无疑是一个非常友好的特性,也让我看到了PySpark在处理复杂分析时的巨大潜力。 第二章的内容,不仅让我学会了如何编写PySpark代码,更重要的是,让我理解了DataFrame的强大之处,以及它在数据处理中的核心地位。读完这一章,我感觉自己已经能够开始着手处理一些实际的数据问题了,这是一种非常令人兴奋的成就感。
评分第七章的内容,让我对PySpark的生态系统有了更全面的认识。作者并没有将PySpark孤立地看待,而是详细介绍了它与其他优秀大数据组件的协同工作方式。首先,他深入探讨了PySpark与Hadoop生态系统的集成。 我之前对HDFS(Hadoop Distributed File System)和YARN(Yet Another Resource Negotiator)的了解仅限于概念层面,而作者通过详细的图示和配置示例,清晰地展示了PySpark作业如何在HDFS上存储数据,以及如何利用YARN来管理和调度PySpark应用程序的资源。这让我明白了,PySpark之所以强大,离不开其底层基础设施的支持。 接着,他重点介绍了PySpark与Hive的集成。作者详细演示了如何使用PySpark来读写Hive中的数据,包括表的创建、数据的加载、以及利用Spark SQL来查询Hive表。这对于许多已经在使用Hive作为数据仓库的企业来说,是非常有价值的内容,因为它提供了一条将现有数据资产与PySpark结合的路径。 他还提到了PySpark与HBase的集成。作者解释了HBase作为一种分布式NoSQL数据库,在处理海量半结构化和非结构化数据方面的优势,以及如何利用PySpark来高效地访问和处理HBase中的数据。这让我意识到,PySpark能够灵活地适应不同类型的数据存储方案。 更让我感到兴奋的是,作者还介绍了PySpark与Spark MLlib、Spark Streaming等组件的无缝集成。他再次强调了Structured Streaming与DataFrame/Dataset的统一性,以及如何在同一个PySpark应用程序中,同时处理批处理、流处理和机器学习任务。这让我看到了构建一个统一、高效的大数据处理平台的可能性。 他还简要提及了PySpark在云平台上的部署和应用,比如如何利用AWS EMR、Azure Databricks、Google Cloud Dataproc等托管服务来简化PySpark集群的搭建和管理。这对于希望利用云弹性来处理大数据任务的开发者来说,是非常实用的信息。 读完第七章,我感觉自己对PySpark不再是一个孤立的技术,而是一个庞大、开放、协同的大数据生态系统中的关键一环。这本书,不仅教会了我如何使用PySpark,更让我理解了它在整个大数据技术栈中的定位和价值。
评分这本书的扉页设计就让我眼前一亮,简洁而不失专业感,封面上那象征着数据流动的抽象图案,仿佛预示着即将展开的精彩内容。拿到书的那一刻,我就迫不及待地翻开了第一章。作者开篇就为我们构建了一个宏大的背景,详细阐述了大数据时代的挑战以及PySpark作为应对这一挑战的关键工具的出现,这不仅仅是枯燥的技术介绍,更像是一次深入浅出的行业洞察。 我尤其欣赏作者在第一章对于“大数据”概念的定义和延展,它没有停留在简单的“数据量大”的层面,而是从数据的多样性、速度和价值等多个维度进行了深入剖析,让我对大数据有了更全面、更深刻的理解。随后,作者自然而然地引出了PySpark,并用清晰的语言解释了它为何能够成为处理如此海量数据的利器。这种循序渐进的讲解方式,对于我这样初次接触PySpark的读者来说,无疑是极大的福音。 作者并没有急于展示复杂的代码,而是花费了大量篇幅来介绍PySpark的核心概念,例如RDD(弹性分布式数据集)的诞生背景、其不可变性和容错性是如何实现的,以及Transformation和Action的区别和应用场景。他对RDD的讲解,简直就像是在为我们搭建一个坚实的理论基础,让我能够理解PySpark的“为什么”而不是仅仅停留在“怎么做”。 其中,关于RDD的惰性求值机制的解释,是我之前一直模糊不清的地方。作者通过几个形象的比喻,将这个概念讲得透彻明了,让我恍然大悟,也为后续理解Spark的性能优化奠定了基础。他还详细地对比了Spark与Hadoop MapReduce在设计理念上的差异,点出了Spark在内存计算方面的优势,并用图示化的方式展示了Spark的执行流程,这些细节的处理,都体现了作者深厚的功底和对读者的良苦用心。 读完第一章,我感觉自己已经不再是对PySpark一无所知的门外汉,而是对它有了初步的认知框架,并且充满了进一步探索的渴望。作者在这一章所呈现的知识深度和广度,以及他将复杂概念化繁为简的能力,都让我对这本书接下来的内容充满了信心。
评分github上有代码
评分存在较多错别字和不通顺的翻译,代码质量也一般,与书籍章节不对应,比如DataFrame一章的代码大部分是用SQL实现。
评分其实我就想知道这是个啥,自己虚拟机配了个pyspark,照着书练一练,目的达到了
评分还行吧,凑合能看
评分翻译得实在是太差了。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有