使用列表在查询中定义SELECT列

时间:2017-11-20 19:56:43

标签: apache-spark pyspark pyspark-sql

我需要从镶木地板文件中查询列名完全不一致的地方。为了解决这个问题并确保我的模型能够准确获取预期的数据,我需要预取'列列表然后应用一些正则表达式模式来限定我需要检索哪些列。在伪代码中:

PrefetchList = sqlContext.read.parquet(my_parquet_file).schema.fields
# Insert variable statements to check/qualify the columns against rules here
dfQualified = SELECT [PrefetchList] from parquet;

我已经四处寻找,看看这是否可以实现,但没有取得任何成功。如果这在语法上是正确的(或关闭),或者如果有人有其他建议,我愿意接受。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script> <header class="header"> <img src="header.jpg" style="max-width:1848px; margin-right:auto;margin-left:auto;" alt=""> </header> <header class="mobile-header"> <img src="header.jpg" style="width:100%;max-width:1848px; margin-right:auto;margin-left:auto;" alt=""> </header> <div class="holygrail-body"> <span class="hamburger" style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776; Menu</span> <div id="mySidenav" class="sidenav"> <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a> <ul> <li><a href="#">Home</a></li> <li><a href="#">New Items</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> </ul> </div> <div class="content"> <h1>Tessssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssst</h1> </div> <ul class="nav"> <li><a href="#">Home</a></li> <li><a href="#">New Items</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> <li><a href="#">Information Page</a></li> </ul> </div> <footer class="footer">©2017</footer>方法,但也可以使用schema方法。 请注意,spark中的select方法有点奇怪,它被定义为.columns,所以你不能传回def select(col: String, cols: String*),你必须使用select(fields:_*)这是一种善意的丑陋的,但幸运的是有df.select(fields.head, fields.tail:_*)作为替代。所以下面这个会有效。它只需要以'user'开头的列

selectExpr(exprs: String*)

这当然假设fields = df.columns.filter(_.matches("^user.+")) // BYO regexp df.selectExpr(fields:_*) 包含您的数据框,加载了df